FLash
FLash

Reputation: 744

LINQ to SQL - Best way for reading data from one to many mapped tables

Which of the following is the best way to read properties from a related table using LINQ to SQL?

var users = (from user in db.users.Where(u => u.Id > 10)
    select new User
    {
        UserName = u.UserName
        UserId = u.Id,
        Address1 = u.UserAddress.FirstOrDefault(a => a.IsHomeAddress).Address1,
        Address2 = u.UserAddress.FirstOrDefault(a => a.IsHomeAddress).Address2,
        Address3 = u.UserAddress.FirstOrDefault(a => a.IsHomeAddress).Address3,
        City = u.UserAddress.FirstOrDefault(a => a.IsHomeAddress).City,
        State = u.UserAddress.FirstOrDefault(a => a.IsHomeAddress).State,
        Zip = u.UserAddress.FirstOrDefault(a => a.IsHomeAddress).Zip
    }).ToList();

OR

var users = (from user in db.users.Where(u => u.Id > 10)
    select new
    {
        UserName = u.UserName
        UserId = u.Id,
        Address = u.UserAddress.FirstOrDefault(a => a.IsHomeAddress)
    }).ToList();

users.ForEach(u => {
    u.Address1 = u.Address.Address1,
    u.Address2 = u.Address.Address2,
    u.Address3 = u.Address.Address3,
    u.City = u.Address.City,
    u.State = u.Address.State,
    u.Zip = u.Address.Zip
});

Or is there a better way?

Upvotes: 0

Views: 54

Answers (1)

Evren Kuzucuoglu
Evren Kuzucuoglu

Reputation: 3885

I'd recommend using let, i.e.:

var users = (
    from user in db.users
    where user.Id > 10
    let homeAddress = user.UserAddress.First(a => a.IsHomeAddress)
    select new User
    {
        UserName = user.UserName
        UserId = user.Id,
        Address1 = homeAddress.Address1,
        Address2 = homeAddress.Address2,
        Address3 = homeAddress.Address3,
        City = homeAddress.City,
        State = homeAddress.State,
        Zip = homeAddress.Zip
    }).ToList();

Upvotes: 3

Related Questions