[英]lambda expression to query a collection by a collection
我想創建一個lambda表達式來按集合查詢集合
在EF代碼優先環境中,我有以下數據對象
我有一個名為price的課程
public class Price
{
public int Id { get; set; }
public string DisplayName { get; set; }
public double Amount { get; set; }
public bool IsActive { get; set; }
public int ItemId { get; set; }
[ForeignKey("ItemId")]
public virtual Item Item { get; set; }
public ICollection<PriceOption> PriceOptions { get; set; }
}
還有一個名為的相關類
public class PriceOption
{
public int Id { get; set; }
public int PriceId { get; set; }
[ForeignKey("PriceId")]
public virtual Price Price { get; set; }
public int OptionId { get; set; }
[ForeignKey("OptionId")]
public virtual Option Option { get; set; }
}
我有兩個搜索條件
int ItemId
List<int> optionIds
我想創建一個lambda表達式來選擇所有與ItemId(easy)相等的價格,以及PriceOptions集合包含所有optionIds的價格。
想法是這樣的,但當然這只是為了表明我想要實現的目標。
List<Price> prices = _priceRepository.FindAll().Where(x => x.ItemId == item.Id && x.PriceOptions.All(y => y.OptionId == optionIds)).ToList();
謝謝您的幫助
伯爵
以下基於Contains
和Count
方法的LINQ查詢生成一個更簡單(因此最終更快)的SQL查詢:
var matchCount = optionIds.Count;
var prices = _priceRepository.FindAll()
.Where(p => p.ItemId == ItemId &&
p.PriceOptions.Count(po => optionIds.Contains(po.OptionId)) == matchCount)
.ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.