C# 无法隐式转换类型
这不是我第一次被困在收藏上。我在这里错过了一些东西,感觉不仅仅是有点沮丧。此代码段用于返回REVIEW db中具有指定“restaurant id”的“restaurant reviews”的计数。我再次收到一个“不能隐式转换类型”错误 提前谢谢C# 无法隐式转换类型,c#,linq,collections,C#,Linq,Collections,这不是我第一次被困在收藏上。我在这里错过了一些东西,感觉不仅仅是有点沮丧。此代码段用于返回REVIEW db中具有指定“restaurant id”的“restaurant reviews”的计数。我再次收到一个“不能隐式转换类型”错误 提前谢谢 public IEnumerable<string> getNumReviews(int RestID) { var NumReviews = from REVIEW in db.REVIEWs
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;
}
public IEnumerable getNumReviews(int-RestID)
{
var NumReviews=来自db.REVIEWs中的REVIEW
其中REVIEW.REST\u ID==RestID
按审核分组审核。审核ID为t
选择新{REVIEW_ID=t.Key,TagCount=t.Count()};
返回NumReviews;
}
您的方法应该返回IEnumerable
,但您的代码返回的是匿名对象的集合。很明显,这两者并不相同
看起来您需要创建具体类型而不是匿名类型,然后修改方法以返回适当的集合:
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()
};
}
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;
}
public IEnumerable GetNumReviews(int-restId)
{
从db.REVIEWs中的审阅返回
其中REVIEW.REST\u ID=restId
按审核分组审核。审核ID为t
选择新的混凝土类型
{
ReviewId=t.键,
TagCount-t.Count()
};
}
您的方法应该返回IEnumerable
,但您的代码返回的是匿名对象的集合。很明显,这两者并不相同
看起来您需要创建具体类型而不是匿名类型,然后修改方法以返回适当的集合:
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()
};
}
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;
}
public IEnumerable GetNumReviews(int-restId)
{
从db.REVIEWs中的审阅返回
其中REVIEW.REST\u ID=restId
按审核分组审核。审核ID为t
选择新的混凝土类型
{
ReviewId=t.键,
TagCount-t.Count()
};
}
问题是您的NumReviews
集合被键入到IEnumerable
中,但它被用作返回键入到IEnumerable
的函数。你要么
- 更改select语句以返回
字符串
- 更改返回类型和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;
}
结构数据{code>
内部内部审查;
内部int标记计数;
}
公共IEnumerable getNumReviews(int-RestID){
var NumReviews=来自db.REVIEWs中的REVIEW
其中REVIEW.REST\u ID==RestID
按审核分组审核。审核ID为t
选择新数据{REVIEW_ID=t.Key,TagCount=t.Count()};
返回NumReviews;
}
问题是您的
NumReviews
集合被键入到IEnumerable
中,但它被用作返回键入到IEnumerable
的函数。你要么
- 更改select语句以返回
字符串
- 更改返回类型和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;
}
结构数据{code>
内部内部审查;
内部int标记计数;
}
公共IEnumerable getNumReviews(int-RestID){
var NumReviews=来自db.REVIEWs中的REVIEW
其中REVIEW.REST\u ID==RestID
按审核分组审核。审核ID为t
选择新数据{REVIEW_ID=t.Key,TagCount=t.Count()};
返回NumReviews;
}
不能保证从查询中获得可枚举的集合。您必须对其调用
.ToList()
,才能获得可枚举的列表。您不能保证从查询中获得可枚举的集合。您必须对其调用.ToList()
,以获取可枚举的列表。NumReviews
是一个IEnumerable
,而不是IEnumerable
。特别是,您正在返回一个对象枚举,其中包括一个REVIEW\u ID
和每个REVIEW的标记计数
最好的选择是声明一个类型来封装该信息:
public class NumReviewInfo
{
public int ReviewId { get; set; }
public int NumTags { 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()
};
}
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;
}
public IEnumerable getNumReviews(int-RestID)
{
var NumReviews=来自db.REVIEWs中的REVIEW
其中REVIEW.REST\u ID==RestID
按审核分组审核。审核ID为t
选择newnumreviewsinfo{ReviewId=t.Key,NumTags=t.Count()};
返回NumReviews;
}
NumReviews
是一个IEnumerable
,而不是IEnumerable
。特别是,您正在返回一个对象枚举,其中包括一个REVIEW\u ID
和每个REVIEW的标记计数
最好的选择是声明一个类型来封装该信息:
public class NumReviewInfo
{
public int ReviewId { get; set; }
public int NumTags { 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()
};
}
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;
}
public IEnumerable getNumReviews(int-RestID)
{
var NumReviews=来自db.REVIEWs中的REVIEW
其中REVIEW.REST\u ID==RestID
按审核分组审核。审核ID为t
选择newnumreviewsinfo{ReviewId=t.Key,NumTags=t.Count()};
返回NumReviews;
}
您正在通过执行以下操作返回匿名类型:
select new { REVIEW_ID = t.Key, TagCount = t.Count() };
这是一个复杂的类型。然而,您的方法签名需要一组字符串
您可以:
select REVIEW_ID = t.Key
它将匹配您当前的方法签名,或者简单地更改您的方法签名以返回复杂类型(可能是元组?),并且:
public IEnumerable getNumReviews(int-RestID)
{
返回
(
来自db.REVIEWs中的REVIEW
其中REVIEW.REST\u ID==RestID
按审核分组审核。审核ID为t
选择新元组(t.Key,t.Count());
);
}