Lambda表达式:如何Concat 2字段?

时间:2013-10-18 13:52:06

标签: asp.net-mvc razor lambda concatenation html-select

我想合并2个数据库字段,并使用Lambda Expression将项目填充到Dropdownlist。这是我的lambda表达式,用于在Controller上填充下拉列表。我尝试了很多组合,但我无法合并这些字段。你能帮帮我,我怎么能这样做?感谢。

注意:这里我想将CityName和MeetingDate字段(例如Paris 01.01.2014)合并为一个下拉列表项。

 private void PopulateMeetingsDropDownList(object selectedMeetings = null)
    {
        var meetingsQuery = repository.Meetings
            .Join(repository.Cities, m => m.MeetingCityId, c => c.CityID,
                    (m, c) => new
                    {
                        CityID = c.CityID,
                        CityName = c.CityName,
                        MeetingDate=m.MeetingStartDate
                    })
             .OrderBy(x => x.CityID).ToList();
        ViewData["MeetingId"] = new SelectList(meetingsQuery, "CityID", "CityName", selectedMeetings);
    }        

2 个答案:

答案 0 :(得分:1)

而不是分开的CityNameMeetingDate返回连接DisplayValue

更新了代码

private void PopulateMeetingsDropDownList(object selectedMeetings = null)
{
    var meetingsQuery = repository.Meetings
        .Join(repository.Cities, m => m.MeetingCityId, c => c.CityID,
            (m, c) => new {
                CityID = c.CityID,
                CityName = c.CityName,
                MeetingDate=m.MeetingStartDate
            }
        )
        .OrderBy(x => x.CityID)
        .AsEnumerable()
        .Select(
            i => new {
                CityID = i.CityID,
                DisplayValue = string.Format(
                    "{0} {1:dd.MM.yyyy}", 
                    i.CityName, i.MeetingDate)
            }
        ).ToList();
    ViewData["MeetingId"] = new SelectList(meetingsQuery, "CityID", "DisplayValue", selectedMeetings);
}

.AsEnumerable()"分裂"这个查询分为两部分,第一部分是LINQ2SQL,第二部分是LINQ2OBJECT。第一部分将在数据库中执行,第二部分在.NET(本地)中执行。通常这是首选方式(提示:性能) - db上的过滤,排序,分组等,应用程序中的其他内容。

更多详情:https://stackoverflow.com/a/17996264/1027198https://stackoverflow.com/a/17968688/1027198

答案 1 :(得分:0)

你摇滚!非常感谢你的大力帮助。实际上我遇到过“LINQ to Entities无法识别方法'System.String Format(System.String,System.Object,System.Object)'的方法,而且这个方法无法转换成商店表达式。”< / em>首次应用您的方法后出现错误消息,但是将“ .ToList()”添加到第三行我已成功。因此,为了通知那些可能需要这个强大功能的人,这是我的控制器中方法的最后一个状态:

private void PopulateMeetingsDropDownList(object selectedMeetings = null)
{
    var meetingsQuery = repository.Meetings.ToList()
        .Join(repository.Cities, m => m.MeetingCityId, c => c.CityID,
                (m, c) => new
                {
                    CityID = c.CityID,
                    DisplayValue = string.Format("{0} ({1:dd MMMM yyyy})", c.CityName, m.MeetingStartDate) 
                })
       .OrderBy(x => x.CityID).ToList();
    ViewData["MeetingId"] = new SelectList(meetingsQuery, "CityID", "DisplayValue", selectedMeetings); 
}


我认为在第3行和第10行使用“ .ToList()”2次没有问题。你能澄清一下吗?再次感谢您的帮助。
BR。