2015-04-18 70 views
1

我想用LINQ來填充列表中的列表來查詢我的數據庫。LINQ在列表中選擇一個列表

我面臨的問題是我不確定如何選擇數據到子列表中。

當試圖執行下面的代碼,我收到錯誤

錯誤1無法隱式轉換類型「System.Linq.IQueryable」到「System.Collections.Generic.IEnumerable」。一個顯式轉換存在(是否缺少強制轉換?)

模型類是像這樣:

public class _LayoutViewModel 
{ 
    public List<CallGuideMenuL1> CGL1 { get; set; } 
} 

public class CallGuideMenuL1 
{ 
    public string Area { get; set; } 
    public List<CallGuideMenuL2> Products { get; set; } 
} 

public class CallGuideMenuL2 
{ 
    public int CallGuideProductId { get; set; } 
    public string Product { get; set; } 
} 

和DB背景:

public class CallGuideArea 
{ 
    public int CallGuideAreaId { get; set; } 
    public string Area { get; set; } 
    public List<CallGuideProduct> CallGuideProducts { get; set; } 
} 

public class CallGuideProduct 
{ 
    public int CallGuideProductId { get; set; } 
    public string Product { get; set; } 
    public int CallGuideAreaId { get; set; } 
    public DateTime Added { get; set; } 
    public DateTime? Deleted { get; set; } 
} 

在我的控制,我試圖選擇像這樣的數據:

_LayoutViewModel vm = new _LayoutViewModel(); 

vm.CGL1 = from a in db.CallGuideArea 
      .SelectMany(p => p.CallGuideProducts) 
      select a; 

我很確定它是select a;行是這個問題,因爲我需要將數據分配回CallGuideMenuL1CallGuideMenuL2的屬性。

任何人都可以在正確的方向指向我正確的LINQ表達式嗎?

+0

什麼是vm.CGL1? –

+0

如果vm.CGL1是IList ,您可以嘗試使用vm.CGL1 = db.CallGuideArea.SelectMany(p => p.CallGuideProducts).ToList(); –

+0

@GiorgiNakeuri'vm.CGL1'是視圖模型類,我已經更新了問題以包含它。 – Gareth

回答

3
vm.CGL1 = db.CallGuideArea.Select(
        a => 
         new CallGuideMenuL1 
         { 
          Area = a.Area, 
          Products = a.CallGuideProducts.Select(p => new CallGuideMenuL2{CallGuideProductId=p.CallGuideProductId,Product=p.Product}).ToList() 
         }).ToList(); 
+0

謝謝,現在有道理。 – Gareth

0

大概vm.CGL1聲明爲List所以你需要選擇到List

vm.CGL1 = (from a in db.CallGuideArea 
      .SelectMany(p => p.CallGuideProducts) 
      select a).ToList(); 

,或者您需要將項目:

vm.CGL1 = (from a in db.CallGuideArea 
      .SelectMany(p => p.CallGuideProducts) 
      select new CallGuideMenuL1() 
      { 
       Area = a.--some property 
       ... 
      }).ToList(); 
+0

感謝您的回答。投影的唯一問題是'a'不包含來自'CallGuideArea'的數據。 – Gareth

相關問題