簡體   English   中英

lambda表達式按集合查詢集合

[英]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();

謝謝您的幫助

伯爵

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM