Reputation: 744
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
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