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