我想创建一个 lambda 表达式来按集合查询集合
在 EF 代码优先环境中,我有以下数据对象
我有一个名为价格的类
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 的价格(简单)以及 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();
关于c# - 按集合查询集合的 lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37168955/