2010-04-07 84 views
1

我試圖運行此代碼:LINQ加入爲排序依據只有

ItemTaxonomy iTaxonomy = from itemTaxonomy in connection.ItemTaxonomy 
         where itemTaxonomy.Item.ID == itemView.ID 
         orderby itemTaxonomy.Taxonomy.Name 
         select itemTaxonomy; 

當我編譯它,我得到的錯誤:

Cannot implicitly convert type 'System.Linq.IOrderedQueryable<Website.Models.ItemTaxonomy>' to 'Website.Models.ItemTaxonomy' . An explicit conversion exists (are you missing a cast?)

我相信這個問題是orderby itemTaxonomy.Taxonomy.Name,但我只是試圖通過分類標題項目的名稱而不是它們的ID進行排序。有沒有辦法做到這一點?

回答

5

不,問題在於結果是序列而您的變量是單個項目

鑑於您要表達的順序,您必須期待多個值 - 所以您想怎麼處理它們?選項:

  • 使用First()

    ItemTaxonomy iTaxonomy = (from itemTaxonomy in connection.ItemTaxonomy 
              where itemTaxonomy.Item.ID == itemView.ID 
              orderby itemTaxonomy.Taxonomy.Name 
              select itemTaxonomy).First(); 
    

    這將最早的名稱返回ItemTaxonomy了所有的人與合適的項目ID。

  • 更改您的變量類型:

    IEnumerable<ItemTaxonomy> taxonomies = 
        from itemTaxonomy in connection.ItemTaxonomy 
        where itemTaxonomy.Item.ID == itemView.ID 
        orderby itemTaxonomy.Taxonomy.Name 
        select itemTaxonomy; 
    

    現在你已經有了分類的順序來處理,而不是單個項目。

+0

謝謝!這真是愚蠢的我。我完全錯過了我沒有將結果設置爲列表。 – 2010-04-07 20:23:58

0

LINQ查詢返回ItemTaxonomy對象的集合(IEnumerable<T>),您試圖將其分配給類型爲ItemTaxonomy的變量。

您需要將變量的類型更改爲IEnumerable<ItemTaxonomy>。 (或致電First()

2

你似乎從查詢捕獲值。嘗試:

var iTaxonomy = from itemTaxonomy in connection.ItemTaxonomy 
       where itemTaxonomy.Item.ID == itemView.ID 
       orderby itemTaxonomy.Taxonomy.Name 
       select itemTaxonomy; 

,或者更明確:

IQueryable<ItemTaxonomy> iTaxonomy = ... 

如果需要一個單獨的項目,使用,First().Single()