我将您的问题解释为无论如何您都想返回所有Items
内容,但您想过滤SubItems
. 对于IQueryable
. 如果需要,您必须使用 select 语句来选择新对象。
选项 1:单独返回数据
var itemsAndSubItems = items
.Select(item => new
{
Item = item,
SubItems = item.SubItems.Where(sub => sub.ID = 1)
}
);
或者如果您不介意急切地将项目加载到内存中:
IEnumerable<Item> = items
.Select(item => new
{
Item = item,
SubItems = item.SubItems.Where(sub => sub.ID = 1)
}
)
.ToList()
.Select(row =>
{
var item = row.Item;
item.SubItems = row.SubItems;
return item;
}
);
选项 2:返回您的类的新实例(您似乎不想这样做)
IQueryable<Item> items = items
.Select(item => new Item
{
SubItems = item.SubItems.Where(sub => sub.ID == 1),
OtherProp = item.OtherProp
/*etc for the other properties on Item*/
}
);
选项 3:向您的班级添加另一个属性。我至少推荐这个。请注意,当您访问 SubItemsWithIdOne 时,您的查询仍将在此处返回所有子项
class Item
{
private List<SubItem> SubItems { get; set; }
private List<SubItem> SubItemsWithIdOne
{
get
{
return this.SubItems.Where(sub => sub.ID == 1);
}
}
}
选项 4:在SubItem
引用它的 parent上添加一个属性Item
。然后返回一个列表SubItem
。这样,您将同时拥有满足您的条件的地方SubItems
。Items
...如果您正在使用 anIEnumerable
您可以执行以下操作:
IEnumerable items = items
.Select(item =>
{
item.SubItems.Where(sub => sub.ID = 1);
return item;
}
);