【问题标题】:Cannot use PadLeft() in lambda expression无法在 lambda 表达式中使用 PadLeft()
【发布时间】:2015-08-25 21:12:29
【问题描述】:

我可以在 Razor View 中使用PadLeft() 方法,如下所示,没有任何问题:

@Model.Project.PKey - @Model.IssueNum.ToString().PadLeft(5, '0')

但是,我无法使用相同的视图模型在控制器中创建相同的语句:

var result = dataContext.Select(m => new
            IssueViewModel
            {
                ID = m.ID,
                ProjectID = m.ProjectID
                Key = m.Project.PKey + "-" + m.IssueNum.ToString().PadLeft(5, '0')
            }
        ).ToDataSourceResult(request);

你知道如何在这个lambda expression 中使用PadLeft() 方法吗?

【问题讨论】:

    标签: asp.net-mvc linq asp.net-mvc-4 lambda padleft


    【解决方案1】:

    在使用PadLeft之前,您需要将数据从数据源导入内存:

    var result = dataContext.Select(
        m => new { // Make a projection of all columns we need into an anonymous type
            ID = m.ID,
            ProjectID = m.ProjectID,
            PKey = m.Project.PKey,
            IssueNum = m.IssueNum
        }) // Now bring the result from the data source into memory
        .AsEnumerable()
        // We are ready to make IssueModel from the parts prepared above:
        .Select(m => new IssueModel {
             ID = m.ID,
             ProjectID = m.ProjectID,
             Key = m.PKey + "-" + m.IssueNum.ToString().PadLeft(5, '0')
         })
         .ToDataSourceResult(request);
    

    现在IssueModel的创建由支持PadLeft的LINQ-to-Object完成。

    【讨论】:

    • 完美!.. 非常感谢这个快速而聪明的答案...投票+
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 2014-11-05
    • 1970-01-01
    • 2016-08-06
    • 1970-01-01
    • 2020-04-20
    • 1970-01-01
    相关资源
    最近更新 更多