我正在使用复杂的 SQL 查询,我必须使用 SqlQuery ...以简单的方式:
型号:
public class C
{
public int ID { get; set; }
[NotMapped]
public float Value { get; set; }
}
Controller :
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 查询的计算值?
感谢您的帮助。
最佳答案
我会从 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-to-Objects,因此应该允许。但我不确定。)
请注意,results
集合不会附加到上下文并由上下文跟踪,但我猜您无论如何都不需要它来让 GET 请求呈现 View 。
当然,您可以直接基于 CHelper
类作为 View 模型来创建 View ,并省略到 C
实体的转换。
关于asp.net-mvc-3 - 如何打印未映射的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13124325/