我正在使用复杂的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查询中打印计算值?
感谢您的帮助。
答案 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
实体。