2016-09-23 59 views
1

嘿所以我對C#比較陌生,因爲我在開始這項工作之前從未使用它。我試圖從linq查詢中返回結果集。然而,我遇到的問題是它的類型是匿名的。我曾嘗試創建一個自定義類型,所以我可以使用它,但我仍然得到一個錯誤信息:無法從查詢中返回linq結果

Severity Code Description Project File Line Suppression State 
Error CS0266 Cannot implicitly convert type 'System.Linq.IQueryable<<anonymous type: 
SCSEntities.SCS_ItemCategory Category, SCSEntities.SCS_Item Item>>' to 
'System.Collections.Generic.List<SchoolCash.DataFactory.ItemFactory.ExportItemTable>'. 
An explicit conversion exists (are you missing a cast?) SchoolCash.DataFactory 
C:\seamysCode\SCA\4.12\Common\SchoolCash.DataFactory\ItemFactory.cs 551 Active 

所以我想知道我失去了一些東西在這裏,因爲我已經看過了的東西說來創造根據需要使用get和setter的自定義類型。然後,我應該能夠返回它。我想知道是否有人可以幫助我,因爲從我有限的眼睛可以看到我正確地做到了這一點。我很感激提前的幫助。

public class ExportItemTable 
    { 
     public SCS_ItemCategory Category { get; set; } 
     public Item Item { get; set; } 
    } 

    public List<ExportItemTable> GetItemExportTable() 
    { 

     var result = 

     from item in Context.SCS_Items 
     join category in Context.SCS_ItemCategories 
     on item.ItemPk equals category.ItemFk 
     into temp 
     from category in temp.DefaultIfEmpty() 

     select new 
     { 
     Category = category, 
     Item = item 
     }; 

     return result.ToList();; 
    } 
+1

錯誤是告訴你問題是什麼..你應該查詢返回,預計其類型是一個列表所以你只需要使用Linq中提供給您的擴展方法,並使用'.ToList( )'如果類型返回需要一個數組..然後相同的'.ToArray()'有大量的免費教程以及MSDN,你可以下載大量的教程,它們的源代碼可以在那裏玩耍和學習與此同時 – MethodMan

回答

4

此代碼創建一個匿名類型:

select new 
{ 
    Category = category, 
    Item = item 
} 

你只需要像這樣創建所需類型的實例:

select new ExportItemTable() 
{ 
    Category = category, 
    Item = item 
} 

在一些語言(如打字稿)如果你有一個與預期類型的​​屬性相匹配的對象,編譯器會將它們視爲同一事物。 C#不會這樣做,並強制您顯式創建要使用的類型的實例。

0

修改如下:

select new ExportItemTable 
      { 
      Category = category, 
      Item = item 
      }; 

return result.AsEnumerable().ToList() 

詳情:

  • 您需要ExportItemTable的結果,所以不能用Anonymous type,假設Category and Item有映射類型
  • 現在你IQueryable<ExportItemTable> ,但您需要返回List<ExportItemTable>,因此請轉換爲