c# - 按集合查询集合的 lambda 表达式

标签 c# linq lambda

我想创建一个 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();

谢谢你的帮助

厄尔

最佳答案

以下基于 ContainsCount 方法的 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/

相关文章:

linq - 使用 LINQ 对集合进行分页

c# - 非常简单的lambda表达式

c# - 为什么无法在即时窗口中评估 lambda?

c# - 使用 linq 和 Entity Framework 构建嵌套表达式

c# - 将反向移动平均公式转换为 C#

c# - IOS 到 C# 什么等同于 id<>

python - 使用 lambda 表达式查找列表中每两个相邻元素之间的差异?

c# - 在网络浏览器中打开记事本文件

c# - 如何从 MethodCallExpression 访问 OrderBy 子句

c# - 将泛型函数作为 Linq 表达式 C# 传递