Linq里面包含的内容

时间:2015-09-07 13:09:08

标签: c# linq repository

我有一个父母表(InventoryItem)和另一个子表(InventoryItemLines),每个父母可以有一个未确定数量的孩子

我需要得到所有的父母和每个父母,我需要获得尊重特定条件的孩子名单。

示例:我在子表中有一个“非活动”位列,我使用此语句来获取数据: “_repository是一个IRepository< InventoryItem>

var entities = _repository.GetAsQueryable().Include(x => x.InventoryItemLines.Where(i => i.Inactive));

但是我得到一个带有消息的ArgumentException:“Include路径表达式必须引用在类型上定义的导航属性。使用虚线路径作为参考导航属性,使用Select运算符作为集合导航属性。 参数名称:路径“

请告诉我这种情况的好习惯吗?

1 个答案:

答案 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();
        }
       
    }
}
​