如何在LINQ中使用join加入项目列表?

时间:2017-05-22 09:18:19

标签: c# .net asp.net-mvc entity-framework linq

我正在研究现有的解决方案。我有两个实体,如

visibility: hidden;

并且还有一个 public class User { public int Id { get; set; } public string Name { get; set; } public string Email { get; set; } public DateTime? DOB { get; set; } private List<long> _accounts = new List<long>(); [Display(Name = "Account No")] public List<long> Accounts { get { return _accounts; } set { _accounts = value; } } [Display(Name = "Account No")] public string AccountId { get { return string.Join(",", _accounts); } set { _accounts = value != null ? value.Split(',').Where(s=>!string.IsNullOrWhiteSpace(s)).Select(s => Convert.ToInt64(s.Trim())).ToList() : new List<long>(); } } } public class Account { public long Id { get; set; } public string AccountName { get; set; } public string AccountNo { get; set; } }

ViewModel

现在,我如何从这些实体中获取 public class UserAccountViewModel { public long AccountId { get; set; } public string AccountNo { get; set; } public int UserId { get; set; } public string UserName { get; set; } }

3 个答案:

答案 0 :(得分:0)

var UserAccountViewModel = (from Account in list1
             join UserAccountViewModel in list2
             on Account .AccountNo equals UserAccountViewModel.AccountNo 
             select new { UserAccountViewModel }).ToList();

希望它对你有所帮助。 或者根据建议提高效果

var query = dataContext.UserAccountViewModel 
            .Include(o => o.Account)
            .Where(t=> t.AccountNo  == t.Account.AccountNo).ToList();

答案 1 :(得分:0)

如果您有两个accnouts列表和要从中创建List的用户,您可以使用:

var userAccount = (from account in list1
         join user in list2
         on account.Id.ToString() equals user.AccountIds
         select new UserAccountViewModel 
        { 
         AccountId = account.Id,
         AccountNo = account.AccountNo,
         UserName = user.Name,
         UserId = user.Id
        }).ToList();

答案 2 :(得分:0)

最后我得到了答案。这就像下面的例子:

        var users = new List<User>{
        new User{Id=1 ,Name="Test1",Email="test1@ds.com",DOB=DateTime.Now,AccountId ="1"},
        new User{Id=2 ,Name="Test2",Email="test2@ds.com",DOB=DateTime.Now,AccountId ="2"},
        new User{Id=3 ,Name="Test3",Email="test3@ds.com",DOB=DateTime.Now,AccountId ="3,4"}
        };
        var accunts = new List<Account>
        {
            new Account {Id=1,AccountName = "A",AccountNo = "1"},
            new Account {Id=2,AccountName = "B",AccountNo = "2"},
            new Account {Id=3,AccountName = "C",AccountNo = "3"},
            new Account {Id=4,AccountName = "D",AccountNo = "4"},
        };

        var userAccounts = (from u in users
                   from a in accunts
                   where u.Accounts.Contains(a.Id)
                   select new UserAccountViewModel
                   {
                       AccountNo = a.AccountNo,
                       AccountId = a.Id,
                       UserId = u.Id,
                       UserName = u.Name
                   }).ToList();