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