2011-12-11 50 views
0
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() 

V1 != V2實體不同這怎麼可能?與EF實體IQueryable.FirstOrDefault()和IEnumerable.FirstOrDefault()返回不同的值

回答

0

問題在於它使用OrderBy()。OrderBy代替OrderBy()。ThenBy()。所以問題就在那裏。如果將源代碼更改爲OrderBy()。ThenBy(),則所有工作都正確。

5

的(以dB爲單位的相同數據)

庫操作!=運算符比較引用,而不是數據。它們可能會返回相同的值,但!=不會比較值,它將對象引用與內存堆(指針)進行比較。

由於您的v2查詢調用.ToList(),它實際上是創建結果的副本並將它們放入不同的變量中。因此,v2指向執行的查詢的結果,而v1指向可執行的查詢。這完全是完全不同的對象。

+0

「!=運算符比較引用,而不是數據。」在這種情況下,是的。值得一提的是,如果你覆蓋.Equals(),這不一定是真的。 –