我正在比较两个不同类型的枚举,但看看它们之间是否有任何区别。我通过将它们都转换为兼容匿名类型的可枚举列表来做到这一点:
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
为空,我会得到一个异常。不幸的是,我不能强制这个数组永远为空。似乎没有一种方法可以设置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 });
但是,这似乎有点 hacky。想法?