2012-12-03 88 views
3

我調用返回IQueryable對象的GetData調用。我用下面的LINQ SelectMany濾除和選擇,我需要 返回List<MyDataType>領域,我得到以下錯誤無法將類型'System.Collections.Generic.IEnumerable <AnonymousType#1>'隱式轉換爲'System.Collections.Generic.List <自定義數據類型>

無法隱式轉換類型System.Collections.Generic.List<AnonymousType#1>System.Collection.Generic.List<MyDataType>

這裏是我的代碼

List<CASES> caseList = cs.GetData(foiaNumber).ToList(); 

Dictionary<int, string> NameDict = 
    caseList.ToDictionary(cases => cases.UID, cases =>  cases.NAME); 


List<MyDataType> bindingGrdList = 
    caseList.SelectMany(x => x.ListObject) 
     .Select(n => 
      new { 
        SUBMITTER_NAME = NameDict[n.UID], 
        NUMBER = n.UID, 
        DATE_SENT = n.DATE_SENT, 
        DATE_DUE = n.DATE_DUE, 
        FINAL_DETERMINATION = n.FINAL_DETERMINATION 
       }).ToList(); 

如何解決AnonymousType錯誤?謝謝。

回答

11

更換

n => new { SUBMITTER_NAME = NameDict[n.UID], NUMBER = n.UID, 
    DATE_SENT = n.DATE_SENT, DATE_DUE = n.DATE_DUE, 
    FINAL_DETERMINATION = n.FINAL_DETERMINATION } 

n => new MyDataType { SUBMITTER_NAME = NameDict[n.UID], NUMBER = n.UID, 
    DATE_SENT = n.DATE_SENT, DATE_DUE = n.DATE_DUE, 
    FINAL_DETERMINATION = n.FINAL_DETERMINATION } 
0

嘗試使用var代替:

var bindingGrdList = caseList.SelectMany(x => x.ListObject).Select(n => new { SUBMITTER_NAME = NameDict[n.UID], NUMBER = n.UID, DATE_SENT = n.DATE_SENT, DATE_DUE = n.DATE_DUE, FINAL_DETERMINATION = n.FINAL_DETERMINATION }).ToList(); 

這將使推斷你的代碼,這是你想要的匿名類型的類型。

+0

當變量是局部於方法時,它很有用,儘管大部分時間結果都會傳遞給調用者方法。 –

+0

他的問題的第一個版本只提到'bindingGrdList'的'List'類型。當時沒有提及「MyDataType」。對於更新的問題,它應該是Rawling回答它的方式。我想要說明的是,對於諸如ASP.NET控件這樣的東西來說,它可能非常有用,綁定數據通常是'object'形式,它將使任何'DataTable'或'IEnumerable'數據源變成虛擬形式。在這些情況下,不需要進行明確的分類。 –

+1

是的,我知道,我投了你的答案:-) –

0

您需要的投影從一個匿名類型更改爲MyDataType。要做到這一點,你需要改變Select這樣的:

List<MyDataType> bindingGrdList = 
    caseList.SelectMany(x => x.ListObject) 
     .Select(n => 
      new MyDataType 
       { 
        SUBMITTER_NAME = NameDict[n.UID], 
        NUMBER = n.UID, 
        DATE_SENT = n.DATE_SENT, 
        DATE_DUE = n.DATE_DUE, 
        FINAL_DETERMINATION = n.FINAL_DETERMINATION 
       }).ToList(); 

注:我假設,這些特性都是正確的屬性MyDataType,並MyDataType具有默認參數的構造函數。

相關問題