0

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

注意:在这里,我想将 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);
    }        
4

2 回答 2

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(本地)中执行。通常这是首选方式(提示:性能) - 数据库上的过滤、排序、分组等,应用程序中的其他内容。

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

于 2013-10-18T18:06:25.090 回答
0

你摇滚!非常感谢您的大力帮助。实际上我遇到过“LINQ to Entities 无法识别方法'System.String Format(System.String, System.Object, System.Object)' 方法,并且该方法无法翻译成存储表达式。” 首次应用您的方法后出现错误消息,但通过将“ .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 行使用 2 次“ .ToList() ” 没有问题。你能澄清一下吗?再次非常感谢您的帮助。
BR。

于 2013-10-18T22:23:16.877 回答