【发布时间】:2017-12-23 19:01:13
【问题描述】:
我正在尝试在 C# 程序中使用 LINQ 从数据库中获取信息。我发现了很多显示基本到高级查询的示例,但是当我尝试构建时出现错误。请参阅下面的基本 LINQ 示例: 使用 LINQ 的类
public class StdFy
{
public object GetStdFy(DrillholeEntities ddb)
{
try
{
var myList = ((from t1 in ddb.DTM_QAQC_BLK_STD from t2 in ddb.DTM_STANDARDSASSAY.Where(x=> t1.STANDARDID==x.STANDARDID && t1.ASSAYVALUE==x.STANDARDVALUE)
select new
{
CHECKID = t1.CHECKID,
STANDARDID = t1.STANDARDID,
PRIORITY = t1.ASSAY_PRIORITY,
NAME = t1.ASSAYNAME,
ASSAYVALUE = t1.ASSAYVALUE,
STANDARDVALUE = t2.STANDARDVALUE,
STANDARDDEVIATION = t2.STANDARDDEVIATION,
NORMALIZACION = (t2.STANDARDVALUE- t1.ASSAYVALUE)/ t2.STANDARDDEVIATION,
LABJOBNO = t1.LABJOBNO,
LOADDATE = t1.RETURNDATE
})).OrderBy(x => x.LOADDATE).ToList();
return myList;
}
catch (Exception)
{
throw new NotImplementedException();
}
}
}
然后
DrillholeEntities ddb;
StdFy stdFy = new StdFy();
using (ddb = new DrillholeEntities())
{
IOrderedEnumerable<DTM_QAQC_BLK_STD> datosTodos;
datosTodos = stdFy.GetStdFy(ddb);
}
当我构建项目时,我得到了错误
严重性代码描述项目文件行抑制状态 错误 CS0266 无法将类型“对象”隐式转换为 'System.Linq.IOrderedEnumerable'。 存在显式转换(您是否缺少 演员?) Inspinia_MVC5 C:\Users\chachl9\Documents\Visual Studio 2015\Projects\MVC5_Full_Version\Inspinia_MVC5\Controllers\GraphsController.cs 55 活动
【问题讨论】:
-
您从查询返回的类型是匿名的 - 不能转换为
DTM_QAQC_BLK_STD。您需要更改您的查询:select new DTM_QAQC_BLK_STD {...}. -
但我的查询中有 2 个表,当仅使用 DTM_QAQC_BLK_STD 进行更改时,我必须做的就是出错
-
你需要 DTM_QAQC_BLK_STD - 所以
select它! -
另外,帮自己一个大忙,使用 PascalCased 属性和类名。您正在使用对象关系 mapper,即类模型中的名称映射到(因此独立于)数据库对象名称。
-
错误信息说明了要做什么。
datosTodos = (IOrderedEnumerable<DTM_QAQC_BLK_STD>)stdFy.GetStdFy(ddb);
标签: c# sql-server linq