LINQ to SQL-从一个到多个映射表读取数据的最佳方法

时间:2019-07-11 13:17:12

标签: c# linq

以下哪项是使用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
});

还是有更好的方法?

1 个答案:

答案 0 :(得分:3)

我建议使用let,即:

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();
相关问题