asp.net-mvc-3 - 如何打印未映射的值

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

我正在使用复杂的 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/

相关文章:

razor - 如何在 ASP.NET Core 中将 ViewComponent 拉到响应缓存 Controller 的操作之外

c# - SMTP 服务器无法从托管 c# asp.net 发送电子邮件

c# - 在 IIS 6 上运行的 ASP.NET MVC 3 应用程序上处理 404

asp.net-mvc - 'Html.Validate' 和 'Html.ValidateFor' 之间的区别

javascript - 禁用调试时,使用捆绑缩小的脚本在 ASP.NET MVC 3 中不起作用

c#-4.0 - 接口(interface)协方差问题

c# - MySQL .Net 连接器问题执行例程

.net - 如何使用Razor语法在@ Html.TextBoxFor中设置值?

c# - 为什么我的 Winforms 应用程序意外退出,但没有错误?

razor - 如何更改 Blazor webassembly 应用程序中的图标?