Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将多个LINQ查询转换为1?_C#_Linq - Fatal编程技术网

C# 将多个LINQ查询转换为1?

C# 将多个LINQ查询转换为1?,c#,linq,C#,Linq,是否可以将此代码转换为一个LINQ查询。我可以发誓我以前做过类似的事情,但我不知道代码可能在哪里。如果一个列表中有来自另一个列表的值,我希望执行子查询并修改所选项目的值 var selectInstructors = _instructorService.GetAllNonGuestInstructors() .Select(i => new SelectListItem()

是否可以将此代码转换为一个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
列表中,我有以下值: 约翰·史密斯,1岁 无名氏,2岁 戴夫·里特,3岁 (在我们迭代持久化的指令之前,
selected
Boolean值默认为false)

时间表。讲师
类具有该时间表的持久化讲师列表: 约翰·史密斯,1岁 戴夫·里特,3岁

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

            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被删除然后被添加。无论如何,我希望这会有所帮助

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();

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

你能澄清一下你想要达到的目标吗?i、 e.涉及哪些实体,它们之间的关系是什么,您的输出应该是什么?代码非常混乱…@Spikeh,我想很明显我正在使用SelectList集合,如果完整列表的ID与类似列表中的ID值匹配,我想设置一个布尔值。我想我会更新这个问题。我不知道为什么投票会被否决。你能澄清一下你想要达到的目标吗?i、 e.涉及哪些实体,它们之间的关系是什么,您的输出应该是什么?代码非常混乱…@Spikeh,我想很明显我正在使用SelectList集合,如果完整列表的ID与类似列表中的ID值匹配,我想设置一个布尔值。我想我会更新这个问题。我不知道为什么会投反对票。我只是将其从集合中删除,以便在selectInstructors集合中更新该项。在我弄明白你提供了什么之前,仅仅执行更新是一种草率的方式!我只是将其从集合中删除,以便更新selectInstructors集合中的项目。在我弄明白你提供了什么之前,仅仅执行更新是一种草率的方式!
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();