4

我正在使用复杂的 SQL 查询,我必须以简单的方式使用 SqlQuery ...:

模型:

public class C
{
    public int ID { get; set; }
    [NotMapped]
    public float Value { get; set; }
}

控制器:

IEnumerable<C> results = db.C.SqlQuery(@"SELECT ID, ATAN(-45.01) as Value from C);
return View(results.ToList());

看法:

@model IEnumerable<C>
@foreach (var item in Model) {
    @Html.DisplayFor(modelItem => item.Value)
}

item.Value 的结果为 NULL。

所以我的问题是,我如何打印 SQL 查询中的计算值?

谢谢你的帮助。

4

1 回答 1

1

我将从Value0 的事实得出结论,即 EF 不会将返回的列映射到模型中未映射的属性。

您可以尝试的替代方法是定义一个辅助类型......

public class CHelper
{
    public int ID { get; set; }
    public float Value { get; set; }
}

然后查询到这种类型,然后将值复制到您的实体:

IEnumerable<C> results = db.Database.SqlQuery<CHelper>(
    @"SELECT ID, ATAN(-45.01) as Value from C")
    .Select(ch => new C
    {
        ID = ch.ID,
        Value = ch.Value
    });

(通常在 LINQ-to-Entities 查询中,您不能使用 . 投影到实体中Select。但我相信Select上面示例中的不过,我不确定。)

请注意,results集合没有附加到上下文并由上下文跟踪,但我猜您无论如何都不需要它来呈现视图的 GET 请求。

当然,您可以直接基于CHelper类作为视图模型创建视图,并省略到C实体的转换。

于 2012-10-30T17:06:47.950 回答