WPF应用程序中的EF Code First错误

时间:2017-01-16 10:13:10

标签: entity-framework

我们使用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

如何克服此错误?

1 个答案:

答案 0 :(得分:2)

由于SqlQuery方法始终返回可枚举序列,因此泛型类型参数(btw称为TElement)表示该序列的元素类型,而不是结果的类型。

因此SqlQuery<List<string>>来电不正确。根据SQL,查询返回一个包含来自YEAR T-SQL函数的单个字段的集合,因此元素类型应为int

现在,基本上IEnumerable<int>来获得所需的List<string>,您可以使用常规LINQ Select来执行intstring转换并结合{ {1}}致电:

ToList