我比較了兩個不同類型的枚舉,但是看到它們之間是否有任何差異。我這樣做是通過鑄造他們既兼容匿名類型的可枚舉列表:使用LINQ比較兩個序列的差異
var curCombo = (from c in curPlan.TPM_TRAININGPLANSOLUTIONS orderby c.TASKID select new { Id = c.TASKID, Marker = c.ISMARKERCOMPLETION });
var newCombo = (from c in plan.Combo orderby c.TaskId select new { Id = c.TaskId, Marker = c.Marker });
然後看看如果序列是一樣的:
bool equals = curCombo.SequenceEqual(newCombo);
這工作得很好,但是如果plan.Combo
爲null,我得到一個異常。不幸的是,我不能強制這個數組永遠不能爲空。實際上似乎沒有辦法將newCombo
設置爲空的陣列,並仍然將兩者與SequenceEqual
進行比較,並且將整個事件設置爲if
塊來捕獲該條件似乎相當混亂。我想要一個單一的,雄辯的LINQ語句。
有一兩件事我想會是這樣的:
var newCombo = (from c in plan.Combo ?? new TrainingPlanCombo[0] orderby c.TaskId select new { Id = c.TaskId, Marker = c.Marker });
然而,這似乎有點哈克。想法?
問題是'plan.Combo'是空集合的空insteaf,這是最佳實踐。 – 2013-05-10 22:34:55
@TimSchmelter - 同意。但是'plan.Combo'從一些來自Web瀏覽器的JSON反序列化,所以很難執行。 – 2013-05-10 22:36:59