2017-03-07 25 views
0

我有以下型號的EntityFramework核心查詢相關數據過濾

Deal.cs

public Guid Id { get; set; } 
public string Code { get; set; } 
public string Name { get; set; } 
public double? Price { get; set; } 

public Guid UserId { get; set; } 
public User User { get; set; } 

User.cs

public Guid Id { get; set; } 
public string Name { get; set; } 
public string ResumptionCookie { get; set; } 
public List<Deal> Deals { get; set; } 

我試圖讓誰目前擁有的所有用戶與特定代碼達成協議。我可以做一個讓所有的用戶和寫一個大的LINQ查詢,但必須有一個更優雅的方式。

我看了documentation,但這並不是我正在尋找的東西,我一直無法弄清楚。

+2

如何使用:'db.Users.Where(x => x.Deals.Any(y => y.Code ==「your_givenCode」));' –

+0

啊,是的,這將返回一個IEnumerable 但就EntityFramework而言,這是優化的嗎?我想我需要使用'.Include'或'.Collections'。我可能在這裏優化,但我想避免加載內存中的所有數據並在過濾後進行過濾。 – martinni39

+0

上面的代碼是延遲加載,即當使用ToList(),First(),Count()和其他方法進行查詢時的加載。但我懷疑是否EF內核支持延遲加載。 –

回答

0

你可以嘗試過濾在交易第一然後選擇用戶

db.Deals.Where(x=>x.code == "specified code").Select(x=>x.User) 

假設每個用戶擁有「指定的代碼」一旦 如果不使用.Distenct() 或什麼阿卡什KC建議交易在評論

+0

問題是EF Core不支持延遲加載。我仍然無法弄清楚如何通過其他方式實現這一目標。 – martinni39

+0

嘗試在.Where條件之前添加.Include(x => x.User) –