我使用复杂的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查询中打印计算值?
谢谢你的帮助.
解决方法
我的结论是,值为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,因此应该允许但我不确定.)
请注意,结果集合不会附加到上下文并由上下文跟踪,但我想您无论如何都不需要它来呈现视图的GET请求.
当然,您可以直接基于CHelper类创建视图作为视图模型,并省略转换为C实体.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。