C# 使用Linq更新列表

C# 使用Linq更新列表,c#,linq,C#,Linq,我正在创建两个对象列表。一个“新”列表,一个“旧”列表 我想从新列表中的对象中获取一个属性的值,并将匹配对象上旧列表中的属性设置为新值 //Original Solution foreach (RyderQuestion quest in myList) { //compare it to every question in ryder questions foreach (RyderQuestion oldQues

我正在创建两个对象列表。一个“新”列表,一个“旧”列表

我想从新列表中的对象中获取一个属性的值,并将匹配对象上旧列表中的属性设置为新值

//Original Solution
        foreach (RyderQuestion quest in myList)
        {
            //compare it to every question in ryder questions
            foreach (RyderQuestion oldQuestion in _ryderQuestions)
            {
                //if the question ids match, they are the same question, and should have the right selected option
                //selecting the option sets the checkbox of the MultipleChoideQuestionControl
                if (oldQuestion.QuestionID == quest.QuestionID)
                {
                    oldQuestion.SelectedOption = quest.SelectedOption;
                }
            }
        }
我试图将其转换为LINQ,以便使用联接使其更有效,但如何直接更新该值

        var x = from quest in myList
                join oldquest in _ryderQuestions
                on new { quest.QuestionID, quest.ShowOn, quest.QuestionOrder }
            equals new { oldquest.QuestionID, oldquest.ShowOn, oldquest.QuestionOrder }
                select oldquest.SelectedOption = quest.SelectedOption;
此查询将值返回到x列表,但我希望实际更新旧列表中的对象。

例如:

var x = from quest in myList
            join oldquest in _ryderQuestions
            on new { quest.QuestionID, quest.ShowOn, quest.QuestionOrder }
        equals new { oldquest.QuestionID, oldquest.ShowOn, oldquest.QuestionOrder }

            select new {quest , oldquest};

foreach(var item in x)
{
    item.quest.SelectedOption = item.oldquest.SelectedOption;
}
你是说这个吗?

例如:

var x = from quest in myList
            join oldquest in _ryderQuestions
            on new { quest.QuestionID, quest.ShowOn, quest.QuestionOrder }
        equals new { oldquest.QuestionID, oldquest.ShowOn, oldquest.QuestionOrder }

            select new {quest , oldquest};

foreach(var item in x)
{
    item.quest.SelectedOption = item.oldquest.SelectedOption;
}
你的意思是?

Linq用于查询,而不是更新。您可以将两个列表连接起来,以排列要更新的对象,但仍需循环进行更改:

var query = from quest in myList
            join oldquest in _ryderQuestions
            on new { quest.QuestionID, quest.ShowOn, quest.QuestionOrder }
        equals new { oldquest.QuestionID, oldquest.ShowOn, oldquest.QuestionOrder }
            select new {oldquest, quest};

foreach(var item in query}
    item.oldquest.SelectedOption = item.quest.SelectedOption
Linq用于查询,而不是更新。您可以将两个列表连接起来,以排列要更新的对象,但仍需循环进行更改:

var query = from quest in myList
            join oldquest in _ryderQuestions
            on new { quest.QuestionID, quest.ShowOn, quest.QuestionOrder }
        equals new { oldquest.QuestionID, oldquest.ShowOn, oldquest.QuestionOrder }
            select new {oldquest, quest};

foreach(var item in query}
    item.oldquest.SelectedOption = item.quest.SelectedOption


你不能在LINQ中这样做。我想你最好的选择是我在另一个q中提出的。如果您想更新旧列表,我看到两个选项。至少保留一个循环,或者构建一个全新的“旧列表”并分配给该对象。为什么在linq语句中加入更多属性,而在for循环中加入更多属性?@Magnus我担心重复,我会有一天回去修复for循环。你不能在
linq
中这样做。我认为你最好的选择是我在另一个q中提出的。如果您想更新旧列表,我看到两个选项。至少保留一个循环,或者构建一个全新的“旧列表”并分配给该对象。为什么在linq语句中加入更多属性,而在for循环中加入更多属性?@Magnus我担心重复,有一天我会回去修复for循环。变量保留在linq查询之外的范围内?我没有可用的…?@CalvinSmith否,
oldquest
quest
是投影创建的新匿名类型属性
select new{oldquest,quest}
@CalvinSmith它不可用是什么意思?谢谢你,我没有注意到你选择了问题,不是值这些变量在linq查询之外的范围内?我没有可用的…?@CalvinSmith没有,
oldquest
quest
是由投影创建的新匿名类型的属性
select new{oldquest,quest}
@CalvinSmith这是什么意思?谢谢,我没有注意到你选择了问题,而不是价值观