0

是否可以将此代码转换为一个 LINQ 查询。我本可以发誓我以前做过类似的事情,但我不知道我可能在哪里代码。如果一个列表具有来自另一个列表的值,我想执行子查询并修改所选项目的值。

var selectInstructors = _instructorService.GetAllNonGuestInstructors()
                                          .Select(i => new SelectListItem()
                                                       {
                                                           Text = i.User.ToFullName(),
                                                           Value = i.Id.ToString() 
                                                       }).ToList();

var selectedItems = schedule.Instructors
                        .Select(instructior1 => selectInstructors.FirstOrDefault(s => s.Value == instructior1.Id.ToString()))
                        .Where(selectedItem => selectedItem != null);

foreach (var selectedItem in selectedItems )
{
    selectInstructors.Remove(selectedItem);
    selectedItem.Selected = true;
    selectInstructors.Add(selectedItem);
}

所以让我们假设在selectInstructors列表中我有这些值:John Smith,1 Jane Doe,2 Dave Ritter,3(在我们迭代持久化的讲师之前,selected布尔值默认为 false)

班级有该schedule.Instructors时间表的持续教师名单:John Smith,1 Dave Ritter,3

现在,我想做的是设置值等于的任何Selected属性selectInstructorsschedule.Instructors

4

2 回答 2

2
var selectedIds = schedule.Instructors.Select(i => i.Id.ToString()).ToList();    

var instructors = (from instructor in _instructorService.GetAllNonGuestInstructors()
                   let value = instructor.Id.ToString()
                   select new SelectListItem()
                   {
                       Text = instructor.User.ToFullName(),
                       Value = value,
                       Selected = selectedIds.Contains(value)
                   }).ToList();
于 2012-07-28T15:35:38.057 回答
1
            var allInstructors = _instructorService.GetAllNonGuestInstructors();
        if(allInstructors!=null)
            allInstructors.Select(i =>
                    new SelectListItem() { Text = i.User.ToFullName(), Value = i.Id.ToString() }).
                    Zip(schedule.Instructors,(selectedItems,instructor)=>
                    {var item = selectedItems.FirstOrDefault(s => s.Value == instructior.Id.ToString());
                        if(item!=null)
                            item.Selected=true;});
      //Now use allInstructors collection further it will have Selected true according to your conditions.

我不明白为什么 selectedItem 被删除然后添加的一件事。无论如何,我希望这会有所帮助。

于 2012-07-28T14:33:07.287 回答