簡體   English   中英

使用Entity Framework上下文獲取非唯一匹配

[英]Getting non-unique matches with Entity Framework context

我正在將代表ID的非唯一long列表傳遞給實體框架上下文。 使用以下代碼,對於列表中每個非唯一的long子集(這里是IList<long> userIds我得到一個User對象

context.Users.Where(x =>  UserIds.Contains(x.Id)).ToListAsync();

因此,傳遞類似{1, 1, 1, 2}將返回{John, Michael} 我想要的回報是{John, John, John, Michael} 我該如何實現?

我認為在這種情況下,您將必須針對每個userId對服務器運行查詢:

var matchingUserList = userIds.Select(uid => context.Users.FirstOrDefault(u => u.Id == uid)).ToList();

有趣的是,看起來LINQ不會將重復查詢發送到SQL服務器,它顯然是緩存了結果。

如果對服務器執行多個查詢可能被禁止,則可以運行一個查詢,然后映射到所需的結果:

var umap = Users.Where(u => userIds.Distinct().Contains(u.Userid)).ToDictionary(u => u.Userid);
var matchingUserList = userIds.Select(i => umap[i]);

暫無
暫無

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

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