2011-08-16 40 views
0

這不是我第一次被困在集合上。我在這裏錯過了一些東西,感覺不僅僅有點沮喪。此代碼片段的設計返回REVIEW數據庫中具有指定「餐館ID」的「餐館評論」數量。再次我得到了一個「不能隱式隱蔽類型」的錯誤。不能隱含轉換類型

在此先感謝!

public IEnumerable<string> getNumReviews(int RestID) 
    { 
     var NumReviews = from REVIEW in db.REVIEWs 
         where REVIEW.REST_ID == RestID 
         group REVIEW by REVIEW.REVIEW_ID into t 
         select new { REVIEW_ID = t.Key, TagCount = t.Count() }; 
     return NumReviews; 
    } 
+0

你的方法的IEnumerable 返回類型但你的SELECT語句創建一個帶有2個屬性一個新的匿名對象。 –

回答

1

NumReviewsIEnumerable<anonymous type>而不是IEnumerable<string>。具體來說,您正在查看包含REVIEW_ID的對象的枚舉,以查看每個評論的標記數。

你最好的選擇是申報類型來封裝信息:

public class NumReviewInfo 
{ 
    public int ReviewId { get; set; } 
    public int NumTags { get; set; } 
} 

然後,從方法選擇對象:

public IEnumerable<NumReviewsInfo> getNumReviews(int RestID) 
{ 
    var NumReviews = from REVIEW in db.REVIEWs 
        where REVIEW.REST_ID == RestID 
        group REVIEW by REVIEW.REVIEW_ID into t 
        select new NumReviewsInfo { ReviewId = t.Key, NumTags = t.Count() }; 
    return NumReviews; 
} 
+0

你能幫我理解'NumTags'整數嗎?代碼似乎工作。謝謝! – Susan

+0

'NumTags'只是'NumReviewInfo'類的一個屬性。當創建一個新的類時,你可以擁有一個初始化塊,在這裏你可以在新對象上設置公共字段/屬性。在這種情況下,代碼將新對象上的'ReviewId'設置爲't.Key',並且將'NumReviews'屬性設置爲't.Count()'。在調用此代碼的方法中,'NumReviews'屬性將包含您想要的計數。 – dlev

+0

還有一個問題,然後我答應讓你獨處。當我嘗試在我的總線中調用該功能時。邏輯層(public IEnumerable getNumReviews(RestID) - INTELLISENSE無法找到NumReviewsInfo並強調它? – Susan

2

您的方法應該返回IEnumerable<string>,但是您的代碼正在返回一組匿名對象。顯然這兩個不一樣。

它看起來像你需要自行創建一個具體類型匿名類型,然後修改你的方法,以返回適當的集合:

public class ConcreteType 
{ 
    public string ReviewId { get; set; } 
    public int TagCount { get; set; } 
} 

,然後更改方法:

public IEnumerable<ConcreteType> GetNumReviews(int restId) 
{ 
    return from REVIEW in db.REVIEWs 
      where REVIEW.REST_ID = restId 
      group REVIEW by REVIEW.REVIEW_ID into t 
      select new ConcreteType 
      { 
       ReviewId = t.Key, 
       TagCount - t.Count() 
      }; 
} 
1

問題是您的NumReviews集合鍵入IEnumerable<anonymous type>,但它被用作返回輸入爲IEnumerable<string>的函數。你需要或者

  • 更改select語句返回string
  • 改變返回類型和SELECT語句產生具體類型

例如

struct Data { 
    internal int REVIEW_ID; 
    internal int TagCount; 
} 

public IEnumerable<Data> getNumReviews(int RestID) { 
    var NumReviews = from REVIEW in db.REVIEWs 
        where REVIEW.REST_ID == RestID 
        group REVIEW by REVIEW.REVIEW_ID into t 
        select new Data { REVIEW_ID = t.Key, TagCount = t.Count() }; 
    return NumReviews; 
} 
0

你AREN不能保證獲得可查詢的枚舉集合。您必須在其上調用.ToList()才能獲得可枚舉的List。

0

你做回一個匿名類型:

select new { REVIEW_ID = t.Key, TagCount = t.Count() }; 

這是一個複雜的類型。而您的方法簽名期望收集字符串。

您可以:

select REVIEW_ID = t.Key 

將匹配當前的方法簽名,或簡單地改變你的方法簽名返回一個複雜類型(也許是Tuple<string,int>?)和:

public IEnumerable<Tuple<string,int>> getNumReviews(int RestID) 
{ 
    return 
    (
     from REVIEW in db.REVIEWs 
     where REVIEW.REST_ID == RestID 
     group REVIEW by REVIEW.REVIEW_ID into t 
     select new Tuple<string,int>(t.Key, t.Count()); 
    ); 
} 
相關問題