C# IQueryable.FirstOrDefault()和IEnumerable.FirstOrDefault()返回不同的值

C# IQueryable.FirstOrDefault()和IEnumerable.FirstOrDefault()返回不同的值,c#,linq,entity-framework,C#,Linq,Entity Framework,v1=v2实体不同怎么可能?(数据以db为单位,相同) 存储库与EF实体一起运行运算符比较引用,而不是数据。它们可能返回相同的值,但是!=不比较值,它将对象引用与内存堆(指针)进行比较 由于v2查询调用了.ToList(),它实际上是在创建结果的副本,并将其放入另一个变量中。因此,v2指向已执行查询的结果,而v1指向可执行查询。这些是完全不同的对象。The!=运算符比较引用,而不是数据。它们可能返回相同的值,但是!=不比较值,它将对象引用与内存堆(指针)进行比较 由于v2查询调用了.ToList

v1=v2实体不同怎么可能?(数据以db为单位,相同)


存储库与EF实体一起运行运算符比较引用,而不是数据。它们可能返回相同的值,但是!=不比较值,它将对象引用与内存堆(指针)进行比较


由于v2查询调用了.ToList(),它实际上是在创建结果的副本,并将其放入另一个变量中。因此,v2指向已执行查询的结果,而v1指向可执行查询。这些是完全不同的对象。

The!=运算符比较引用,而不是数据。它们可能返回相同的值,但是!=不比较值,它将对象引用与内存堆(指针)进行比较


由于v2查询调用了.ToList(),它实际上是在创建结果的副本,并将其放入另一个变量中。因此,v2指向已执行查询的结果,而v1指向可执行查询。这些是完全不同的对象。

问题是它使用了OrderBy().OrderBy代替了OrderBy().ThenBy()。所以问题就在这里。如果将源代码更改为OrderBy().ThenBy(),则所有工作都是正确的。

问题是它使用了OrderBy().OrderBy而不是OrderBy().ThenBy()。所以问题就在这里。如果将源代码更改为OrderBy().ThenBy(),则所有工作都正确。

“该!=运算符比较引用,而不是数据。”在本例中,是。值得一提的是,如果重写.Equals(),则不一定是这样。“!=运算符比较引用,而不是数据。”在本例中,是的。值得一提的是,如果重写.Equals(),则不一定如此。
var v1 = _questionRepository.GetQuery().Where(q =>
                    q.EvaluationGroupId == evaluationGroupId &&
                    ((q.TopicValue == questionTopic &&
                    q.Index > currentQuestionIndex) ||
                     (q.TopicValue > (questionTopic) &&
                     q.Index >= 0 && q.Id != currentQuestionIndex)))
                     .OrderBy(q => q.Index).OrderBy(a => a.TopicValue).FirstOrDefault();

   var v2 = _questionRepository.GetQuery().Where(q =>
                    q.EvaluationGroupId == evaluationGroupId &&
                    ((q.TopicValue == questionTopic &&
                    q.Index > currentQuestionIndex) ||
                     (q.TopicValue > (questionTopic) &&
                     q.Index >= 0 && q.Id != currentQuestionIndex)))
                     .OrderBy(q => q.Index).OrderBy(a => a.TopicValue).ToList().FirstOrDefault()