簡體   English   中英

我如何在實體框架中執行此操作(多個位置或加入)?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM