【问题标题】:how to get data from linq database model如何从 linq 数据库模型中获取数据
【发布时间】: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&lt;DTM_QAQC_BLK_STD&gt;)stdFy.GetStdFy(ddb);

标签: c# sql-server linq


【解决方案1】:

您正在返回一个匿名类型的对象列表

select new { ... }

这可能是您使用对象作为方法的返回类型的原因。 比您将返回值分配给特定类型。这就是抛出异常的原因。

为了完成这项工作,我将实现一个包含所有您需要的属性的新类。使用它

select new MyNewClass { Property1 = ...}

将方法的返回类型从对象更改为IEnumerable&lt;MyNewClass&gt;。以及您分配返回值的变量。


您还应该使用 Gert Arnold 在 cmets 中提到的 PascalCase 属性。

同时将select from in where LINQ 语法与Lambda 方法.Where(x =&gt; ...) 混合使用会使其难以阅读。

【讨论】:

    猜你喜欢
    • 2023-04-09
    • 2017-06-14
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多