2017-05-22 102 views
0

我正在研究現有的解決方案。當我有兩個實體,如如何獲得在LINQ中使用連接的項目列表?

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; } 

    } 

現在,我怎樣才能從這些實體List<UserAccountViewModel>

+2

你不能。你需要在AccountId和UserId之間有一個映射。你可以有5個用戶和10個賬戶,你不知道哪個用戶擁有每個賬戶。 – jdweng

+0

有幾個問題。你爲什麼不把賬戶實體映射到用戶實體?其次,如果用戶可以擁有多個帳戶,爲什麼UserAccountViewModel不包含帳戶列表? – Saket

+0

你需要在'帳戶'實體和'用戶'實體之間有關係 - 它似乎需要'ICollection'在它們之間進行映射。此外,它可能需要'UserAccountViewModel'中的'List Accounts'來存放多個帳戶。 –

回答

0

最後我得到我的回答。就像下面的例子:

 var users = new List<User>{ 
     new User{Id=1 ,Name="Test1",Email="[email protected]",DOB=DateTime.Now,AccountId ="1"}, 
     new User{Id=2 ,Name="Test2",Email="[email protected]",DOB=DateTime.Now,AccountId ="2"}, 
     new User{Id=3 ,Name="Test3",Email="[email protected]",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(); 
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(); 
+4

在使用實體框架時,使用導航屬性優於連接。這是更好的優化和更好的理解。 – Mafii

+0

這不是答案。請先閱讀並理解我的問題。我需要的是我所要求的。 – Ashiquzzaman

0

如果你有accnouts以及您要創建列表中的用戶的兩個列表,你可以使用:

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(); 
+0

你在BD?好像我可以來到你的辦公室並幫助你。 :) –

+0

這不是答案。請先閱讀並理解我的問題。我需要正是我所要求的。從我的個人資料中找到我的公司名稱,並且您隨時歡迎。 – Ashiquzzaman

+0

請您詳細解釋一下這個問題,請先幫助我們理解問題。 –

相關問題