【问题标题】:LINQ WHERE method alters source collectionLINQ WHERE 方法改变源集合
【发布时间】:2012-04-11 01:33:43
【问题描述】:

我有一个返回新列表的方法(它与多选答案有关):

public static List<questionAnswer> GetAnswersWithSelections(this Questions_for_Exam__c question)
        {
            List<questionAnswer> answers = new List<questionAnswer>();

            answers.Add(new questionAnswer() { Ordinal = 1, AnswerText = question.AN1__c, Selected = (bool)question.Option1__c });

            ...

            return answers;
        }

如果我检查此方法的结果 - 我会看到正确的数据,例如红色 = 假,绿色 = 真,蓝色 = 假

然后我尝试使用 LINQ Where 扩展方法过滤返回的结果:

List<questionAnswer> CorrectSelections = question.GetAnswersWithSelections();

var tmpA = CorrectSelections.Where(opt => opt.Selected = true);

当我实现 tmpA 时,会发生两件事:

  1. 源列表中的数据发生变化 - 例如红色 = 真,绿色 = 真的,蓝色 = 真
  2. tmpA 中的数据设置为相同的错误数据 源列表已更改为

有什么想法吗?

【问题讨论】:

  • 羞愧地低着头...开始填写麦当劳员工申请表
  • 顺便说一句,您的错误代码不会改变源集合;它实际上是在更改存储在集合中的项目。这是一个微妙但重要的区别。

标签: c# linq collections


【解决方案1】:

您需要使用== 而不是=

var tmpA = CorrectSelections.Where(opt => opt.Selected == true);

因此,当您搜索条件时,您就是在设置值。 这是一个常见的错误,我也喜欢它:)

【讨论】:

    【解决方案2】:

    你的线路

    opt => opt.Selected = true
    

    需要另一个等号:

    opt => opt.Selected == true
    

    【讨论】:

      【解决方案3】:

      你想要opt.Selected == true。你有一个=

      【讨论】:

        【解决方案4】:

        在您的 linq 代码中将 = 更改为 ==

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多