如何打印未映射的值

时间:2012-10-29 15:09:14

标签: asp.net-mvc-3 c#-4.0 razor entity-framework-4

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

MODEL:

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查询中打印计算值?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我的结论是Value为0,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不会影响数据库查询,并且是LINQ-在内存中的对象,所以它应该被允许。但我不确定。)

请注意,results集合未被上下文附加和跟踪,但我想您无论如何都不需要它来呈现视图的GET请求。

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