我有一个父母表(InventoryItem)和另一个子表(InventoryItemLines),每个父母可以有一个未确定数量的孩子
我需要得到所有的父母和每个父母,我需要获得尊重特定条件的孩子名单。
示例:我在子表中有一个“非活动”位列,我使用此语句来获取数据: “_repository是一个IRepository< InventoryItem>
var entities = _repository.GetAsQueryable().Include(x => x.InventoryItemLines.Where(i => i.Inactive));
但是我得到一个带有消息的ArgumentException:“Include路径表达式必须引用在类型上定义的导航属性。使用虚线路径作为参考导航属性,使用Select运算符作为集合导航属性。 参数名称:路径“
请告诉我这种情况的好习惯吗?
答案 0 :(得分:0)
代码看起来像这样
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
DataTable InventoryItem = new DataTable();
InventoryItem.Columns.Add("Item", typeof(string));
InventoryItem.Rows.Add(new object[] { "Shoes" });
InventoryItem.Rows.Add(new object[] { "Ties" });
InventoryItem.Rows.Add(new object[] { "Dresses" });
DataTable InventoryItemLines = new DataTable();
InventoryItemLines.Columns.Add("Item", typeof(string));
InventoryItemLines.Columns.Add("Color", typeof(string));
InventoryItemLines.Columns.Add("Active", typeof(Boolean));
InventoryItemLines.Rows.Add(new object[] { "Shoes", "Red", true });
InventoryItemLines.Rows.Add(new object[] { "Shoes", "Blue", true });
InventoryItemLines.Rows.Add(new object[] { "Shoes", "Turquoise", false });
InventoryItemLines.Rows.Add(new object[] { "Ties", "Red", true });
InventoryItemLines.Rows.Add(new object[] { "Ties", "Stripped", true });
InventoryItemLines.Rows.Add(new object[] { "Ties", "Pokerdot", false });
InventoryItemLines.Rows.Add(new object[] { "Dresses", "Yellow", true });
InventoryItemLines.Rows.Add(new object[] { "Dresses", "Blue", true });
InventoryItemLines.Rows.Add(new object[] { "Dresses", "Violet", true });
InventoryItemLines.Rows.Add(new object[] { "Tresses", "Stripped", false });
var results = InventoryItem.AsEnumerable().Select(x => new
{
item = x.Field<string>("Item"),
inactive = InventoryItemLines.AsEnumerable().Where(y => (y.Field<string>("Item") == x.Field<string>("Item")) && !y.Field<Boolean>("Active")).ToList()
}).ToList();
}
}
}