Tell me more ×
Code Review Stack Exchange is a question and answer site for peer programmer code reviews. It's 100% free, no registration required.

These two methods do the exact same thing (or at least they are supposed to!). They both pass a simple test based on a mock context. Neither has been exposed to any integrated testing yet.

  • Would one of the methods be preferred over the other (and why)?
  • Does anyone see any glaring mistakes in the LINQ version (this is my first real attempt at a LINQ query)?

As you can see the first method is using a repository to hit a database. In order to get the data needed, it makes two db calls to two different tables. The second method is an attempt to simplify the code, make it cleaner and more readable. Performance is not a primary concern at this point. It's really more of a learning exercise.

public string GetDealerEmail( string dealerId )
{
    var dealerAddressRepo = StagRepositoryFactory<DealerAddress>.GetRepository( _spcomContext );
    List<DealerAddress> dealerAddress = dealerAddressRepo.GetWhere( x => x.DealerId.Equals( dealerId ) ).ToList( );
    string addressId = dealerAddress.FirstOrDefault( item => item.AddressTypeCode.Equals( "dealer", StringComparison.CurrentCultureIgnoreCase ) ).AddressId;
    var addressRepo = StagRepositoryFactory<Address>.GetRepository( _spcomContext );
    Address address = addressRepo.GetSingle( x => x.AddressId.Equals( addressId ) );
    return address.Email;
}



public string GetDealerEmailWithLinq( string dealerId)
{
    ISpcomContext context = _spcomContext as ISpcomContext;
    var query = from dealerAddress in context.DealerAddresses
                where dealerAddress.DealerId.Equals( dealerId )
                where dealerAddress.AddressTypeCode.Equals( "dealer", StringComparison.CurrentCultureIgnoreCase )
                join address in context.Addresses
                    on dealerAddress.AddressId equals address.AddressId
                select address.Email;
    var emailAddress = query.FirstOrDefault( );
    return emailAddress;    
}
share|improve this question
1  
What library are you using in the first version of the method? – svick Sep 19 '12 at 20:19
@svick It's using a generic repository for database access via DbContext and EF 4.1 – Forty-Two Sep 19 '12 at 21:02
I would go with option 2 encapsulated within a repository method. I personally find it easier to read whilst putting inside the repository you can reuse elsewhere if required. – dreza Sep 19 '12 at 21:12
1  
You may also use Include() as Third option. Check out this blogs.msdn.com/b/adonet/archive/2011/01/31/… context.DealerAddresses.Where(d => d.DealerId.Equals( dealerId ) && d.AddressTypeCode.Equals( "dealer", StringComparison.CurrentCultureIgnoreCase )). Include(d => d.Addresses).Select(d => d.Email).FirstOrDefault(); – Jignesh Thakker Sep 22 '12 at 5:35

Know someone who can answer? Share a link to this question via email, Google+, Twitter, or Facebook.

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Browse other questions tagged or ask your own question.