我们使用EF,并尝试以这种方式查询数据库:
using (var ctx = contextFactory.CreateContext())
{
InspectionListByYear = ctx.Database.SqlQuery<List<string>>(@"select YEAR(EndDate) from Diagnostics as d inner join EquipmentDiagnostics as ed
on d.Id = ed.Diagnostics_Id where d.Discriminator LIKE '%VisualCheck%' and ed.Equipment_Id = 7 group by DATEPART(yyyy, EndDate)");
}
public List<string> InspectionListByYear
{
get { return _inspectionListByYear; }
set
{
if (Equals(value, _inspectionListByYear))
return;
_inspectionListByYear = value;
RaisePropertyChanged(() => InspectionListByYear);
}
}
但是,提出了编译错误:
Error 134 Cannot implicitly convert type 'System.Data.Entity.Infrastructure.DbRawSqlQuery<System.Collections.Generic.List<string>>' to 'System.Collections.Generic.List<string>' D:\Repositories\Dev\Eam\Src\Modules\VisualCheck\VisualCheckAnalysis\VisualCheckAnalyzerViewModel.cs 77 40 VisualCheckAnalysis
如何克服此错误?
答案 0 :(得分:2)
由于SqlQuery
方法始终返回可枚举序列,因此泛型类型参数(btw称为TElement
)表示该序列的元素类型,而不是结果的类型。
因此SqlQuery<List<string>>
来电不正确。根据SQL,查询返回一个包含来自YEAR
T-SQL函数的单个字段的集合,因此元素类型应为int
。
现在,基本上IEnumerable<int>
来获得所需的List<string>
,您可以使用常规LINQ Select
来执行int
到string
转换并结合{ {1}}致电:
ToList