查询子属性时选择父项和子项

Bob*_*way 2 c# linq

在我的数据结构中,我有以下类:

public partial class Item
{
    // stuff
    public int QuoteId { get; set; }
    public virtual ItemType ItemType { get; set; }
}

public partial class ItemType
{
    //stuff
    public virtual ICollection<Item> Items { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是获取所有ItemTypes的列表,每个ItemTypes都根据QuoteId填充其Items集合.

因此,例如,如果有三种项目类型,则其中只有两种具有引用ID为50的项目:

  • ItemType1
    • Item.QuoteId == 50
  • ItemType2
  • ItemType3
    • Item.QuoteId == 50

我已经设法通过这个查询获得了一些东西:

r.ItemTypes.Select(x => x.Items.Where(i => i.QuoteId == CurrentQuote.QuoteId));
Run Code Online (Sandbox Code Playgroud)

但是这给了你(正如你所预期的那样,因为我正在Select使用Item)是一个IEnumerable<IEnumerable<Item>>.这具有我之前的结构,但没有ItemType数据.

我意识到这是一个愚蠢的问题,但我对无法得到答案感到沮丧.

Bac*_*cks 9

r.ItemTypes.Where(x => x.Items.Any(i => i.QuoteId == CurrentQuote.QuoteId));
Run Code Online (Sandbox Code Playgroud)

如果您需要获取所有ItemTypes并且只获取每个项目的特定项目,您可以这样做:

r.ItemTypes.Select(x => new 
{
    x, 
    FilteredItems = x.Items.Where(i => i.QuoteId == CurrentQuote.QuoteId)
});
Run Code Online (Sandbox Code Playgroud)

之后,你需要分配x.ItemsFilteredItems每一个ItemType的