我有這個域名:LINQ到實體:多對多在一個單一的選擇
public class User
{
public long Id { get; set; }
public string Login { get; set; }
public string Password { get; set; }
}
public class Application
{
public long Id { get; set; }
public string Name { get; set; }
}
public class UserApplications
{
[ForeignKey("User")]
public long UserId { get; set; }
public User User { get; set; }
[ForeignKey("Application")]
public long ApplicationId { get; set; }
public Application Application { get; set; }
public DateTime LastConnection { get; set; }
}
我希望做一個選擇返回類似的東西:
List of select new
{
User = user,
Applications = applications // List of all user's applications
}
我嘗試:
from u in Users
join ua in UserApplications on u.Id equals ua.UserId into userApplications
from ua in userApplications.DefaultIfEmpty()
join a in Applications on ua.ApplicationId equals a.Id into applications
select new
{
User = u,
Applications = applications
}
但是,這會重複用戶到每個應用程序。
我知道我可以在兩個select語句中做到這一點,但我不希望這樣做。
我該怎麼做?
謝謝。這可行,但應用程序必須是列表,而不是列表。 –
2014-12-02 08:33:57
它只需要從'g'項目中提取'Application'屬性! :) – 2014-12-02 08:35:33
最好不要將Linq與Linq to Entity查詢混合使用Object(擴展)方法調用,例如'ToList'。相反,將Linq轉換爲Entity查詢並將模型轉換爲(比如說)View Model對象(而且,如果您通過一些更多的代碼並以懶惰的方式從數據庫中提取它們,而不是將它們全部拉入記憶;你會看到像分頁這樣的任務的區別,在這種情況下,沒有實際需要整套答案)。 – 2014-12-02 08:40:42