[英]How do I do this in Entity Framework (multiple where's or Join)?
我有2個表彼此相關聯
表A與表B具有1對多的關系,因此這會為每個表創建一個導航屬性。
現在我需要檢查表A(userName)中的值,我需要檢查表B(ClubId)中的值。
所以在我看來它會是這樣的
Join the tables together
Where A.userName == "bob" &&
where B.clubId == "Car"
// return the count.
但現在我知道實體的東西它應該使連接不太常見,所以我想知道我是否可以通過連接來實現。
我試過這個
int count = Entity.TableA.where(a => a.userName == "bob" && a.TableB.where(i => i.ClubId == "Car")).Count();
所以這不起作用,因為它不會返回正確的類型(第二個在哪里)。 這就是我的想法,我希望它能夠完成的工作方式。
那它應該怎么樣?
PS
我寧願在Linq方法查詢中完成一個例子,就像我上面做的那樣。
假設您的EF模型具有用戶和俱樂部之間的關系,可以執行以下操作:
var usersNamedBobInCarClub =
from A in User
from B in A.Clubs
where A.userName == "bob" &&
B.clubId == "Car"
select A;
如果您希望用戶和俱樂部的返回元素查看查詢中的聯接。
在加入之前過濾TableA
可能更有效:
var clubs = from a in Entity.TableA
where a.userName == "bob"
from b in a.TableB
where b.clubId == "Car"
select b;
var count = clubs.Count();
您不必使用兩個變量,為了清楚起見,這只是我的偏好。
或者在方法語法中,您可以簡化一下:
var count = Entity.TableA.Where(a => a.userName == "bob")
.SelectMany(a => a.TableB)
.Count(b => b.clubId == "Car");
但是,我不確定EF是否了解這些特定的表達方式。 如果沒有,編譯器將翻譯上述查詢,如下所示:
var count = Entity.TableA.Where(a => a.userName == "bob")
.SelectMany(a => a.TableB, (a,b) => new { a, b })
.Where(x => x.b.clubId == "Car")
.Count();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.