这不是我第一次被困在收藏品上。我在这里错过了一些东西,感觉不仅仅是有点沮丧。此代码段设计返回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 :(得分: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 :(得分:1)
问题是您的NumReviews
集合被输入IEnumerable<anonymous type>
,但它被用作键入IEnumerable<string>
的函数的返回值。你需要
string
例如
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;
}
答案 2 :(得分:1)
NumReviews
是IEnumerable<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;
}
答案 3 :(得分:0)
您无法保证获得可从查询中枚举的集合。您必须在其上调用.ToList()
才能获得可枚举的列表。
答案 4 :(得分: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() );
);
}