lambda表达式按集合

时间:2016-05-11 16:58:21

标签: c# linq lambda

我想创建一个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 collection包含所有optionIds。

这个想法是这样的,但当然这仅仅是为了展示我想要实现的目标。

List<Price> prices = _priceRepository.FindAll().Where(x => x.ItemId == item.Id && x.PriceOptions.All(y => y.OptionId == optionIds)).ToList();

感谢您的帮助

厄尔

1 个答案:

答案 0 :(得分:1)

以下基于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();