2015-09-07 56 views
0

我有父母的表(InventoryItem)和儿童(InventoryItemLines)的另一个表和每个家长可以有孩子的LINQ如果里面包含

我需要让所有的家长和每个家长的人数不详,我需要获得尊重特定条件的儿童名单。

例子:我在孩子们的表的“无效”位列我用这个语句来获得数据: “_repository是IRepository < InventoryItem>

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

我使用以下消息获取ArgumentException:“包含路径表达式必须引用该类型上定义的导航属性。对于参考导航属性使用虚线路径,对集合导航属性使用Select运算符。 参数名称:路径”

能否请你告诉我一个很好的做法这种情况

+0

基本上就可以?没有办法,没有办法有条件地包括使用EF的相关实体。 –

+0

你不能这样做,你必须使用投影来实现这一点 – Coder1409

回答

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