Linq混合扩展和查询语法

Cri*_*ole 8 c# linq c#-4.0

我更喜欢使用扩展方法进行基本的LINQ操作:Where(),Select但对于复杂的Select(),SelectMany()尤其是OrderBy().ThenBy()语句,我发现查询语法更具可读性和自然性.

今天我发现自己有以下查询:

from c in _myObject.ObjectsParent.ParentsEnumerable
                    .Where(c =>
                        c == anotherObject || c.Parent == anotherObject)
from q in c.MyObjectsEnumerable
orderby c.SortKey, q.Description
select new { Item = q, Text = c.Description + " -> " + q.Description };
Run Code Online (Sandbox Code Playgroud)

混合查询和扩展语法是危险的(出于可读性,可维护性或任何其他原因)?

这有可能是非常主观的,如果是,我很抱歉,如果它不符合一个好的主观问题的要求.如果我可以改进它,请告诉我!

Ree*_*sey 6

混合查询和扩展语法是危险的(出于可读性,可维护性或任何其他原因)?

我看到的最大危险是你的代码中可能会增加"惊喜",特别是在其他开发人员查看时.

从编译的角度来看,查询语法直接转换为扩展方法调用,因此这里不一定存在技术问题.但是,这可能会增加额外的方法调用,乍一看,许多开发人员都不会这样做.这可能会导致潜在的可维护性问题.

话虽这么说,如果谨慎而有充分理由,我不觉得混合语法存在真正的问题.这实际上很常见 - 例如,如果你想用查询语法编写,但需要完全评估,它通常用括号添加.ToList()添加 - 或者如果你想使用带有查询语法的PLINQ,它通常是from x in collection.AsParallel(),这在技术上也是混合语法......