linq - 在 ASP.NET MVC 3 中执行动态 View 模型的最简单方法

标签 linq dynamic asp.net-mvc-3

警告:这可能是对 C# 动态关键字的不当使用,我可能应该使用强类型 View 模型,但是...

我试图通过将 C# 4 动态类型传递给我的 View 来避免创建强类型 View 模型。我的 Controller 中有这个:

    public ActionResult Index()
    {
        var query =
            from fr in db.ForecastRates
            join c in db.Codes
            on 
                new { Code = fr.RateCode, CodeType = "ForecastRate" }
            equals 
                new { Code = c.CodeValue, CodeType = c.CodeType }
            select new
            {
                RateCode = fr.RateCode,
                RateCodeName = c.CodeName,
                Year = fr.Year,
                Rate = fr.Rate,
                Comment = fr.Comment
            };

        // Create a list of dynamic objects to form the view model
        // that has prettified rate code
        var forecastRates = new List<dynamic>();

        foreach (var fr in query)
        {
            dynamic f = new ExpandoObject();

            f.RateCode = fr.RateCode;
            f.RateCodeName = fr.RateCodeName;
            f.Year = fr.Year;
            f.Rate = fr.Rate;
            f.Comment = fr.Comment;

            forecastRates.Add(f);
        }

        return View(forecastRates);
    }

...在我看来这是这样的(我正在使用 MVC 3 的 Razor View 引擎):

        @inherits System.Web.Mvc.WebViewPage<IEnumerable<dynamic>>

        ...

        <tbody>
            @foreach (var item in Model) {
            <tr>
                <td>@item.RateCodeName</td>
                <td>@item.Year</td>                            
                <td>@item.Rate</td>
                <td>@item.Comment</td>
            </tr>
            }
        </tbody>

我不喜欢迭代 LINQ 结果以形成动态对象列表的方式。

我想初始化 LINQ 查询中的每个 ExpandoObject,但是 that doesn't seem to be supported .

我尝试将查询结果转换为列表,但这不起作用,因为您无法将匿名类型转换为动态类型。

最佳答案

正如您所说,不支持。 (我并不是说不支持动态 View 模型 - 我是说不支持您想要做的事情)

您可能可以整理 LINQ 查询,但最终最好的选择是简单地创建一个自定义 View 模型。说真的,你大约需要 30 秒才能做到这一点。

我知道动态是新的、很酷的,但是如果您在这种情况下坚持使用自定义 View 模型,您的代码将会更加整洁且更易于维护。

我只会在非常简单的场景中使用动态 View 模型 - 大多数时候你可能想坚持我们一直在做的事情 - 自定义 View 模型。

关于linq - 在 ASP.NET MVC 3 中执行动态 View 模型的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3758612/

相关文章:

c# - 如何重写此 Linq 查询以避免使用 FirstOrDefault?

javascript - AngularJS 嵌套 ng-repeats 和嵌套绑定(bind)

java - Java中的动态多态性有什么好处?

javascript - 如何在单击时从 JavaScript 添加参数到 @Url.Action() 调用

asp.net-mvc - 在IIS 7.5上托管的ASP.Net MVC 3/4默认处理程序映射

c# - 使用 LINQ/C# 使用 JSON 内容

c# - 如何使用 LINQ 查询平均 DateTime 字段?

c# - 在 C# 中的新行上用分号拆分字符串

Angular - Textarea 自动高度不会在删除文本时自动调整大小

asp.net-mvc-3 - 如何为 Azure 创建返回 503 的自定义维护页面?