2015-09-07 52 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(); 
 
     } 
 
     
 
    } 
 
} 
 
​