簡體   English   中英

如何檢查帶有LINQ to Entities的另一個集合中是否存在實體的子集合的項目?

[英]How can I check whether an item of an Entity's child collection exists in another collection with LINQ to Entities?

我希望有人從這個問題中抓住了這個主意,但是我不知道如何更好地總結一下。

問題是我嘗試在應用程序中進行簡單搜索。 我有多對多關系中的Question和Tag實體,例如StackOverflow中的實體。

我將標簽ID數組傳遞給我的過濾方法。 它應該返回所有具有此標簽(帶有此ID)的Question實體。 我這樣做是這樣的:

int[] tagIds = { 1, 2, 3};
var questions = myEntities.Questions
                    .ToList()
                    .Where(q => tagIds.Intersect(q.Tags.Select(t => t.Id).ToArray()).Any())
                    .ToList();

一切正常,但是現在我添加了更多的過濾器,並且更多的方法使用了此過濾器,因此我想獲取一個DbQuery對象而不是List。

我嘗試刪除.ToList()表達式,以獲得適當的結果:

int[] tagIds = { 1, 2, 3};
var questions = myEntities.Questions
                    .Where(q => tagIds.Intersect(q.Tags.Select(t => t.Id).ToArray()).Any());

不幸的是,我得到一個例外,指出LINQ無法識別.ToArray()方法。 誰能給我一個更好的主意如何實現這一目標?

ToArray()方法甚至在

.Where(q => tagIds.Intersect(q.Tags.Select(t => t.Id).ToArray())

因為Intersect只需要Select已經返回的IEnumerable,而不一定是數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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