如何在c#中的.OrderBy中使用多行?

时间:2013-06-25 17:57:20

标签: c#

我有这段代码

folderList = (List<SPFolder>)folderList.OrderBy(folder => Object x = folder.GetProperty("Order Folder By"); x == null ? 0 : (int)x;).ToList();

但它给了我一个语法错误。

有谁知道这里有什么不对吗?

感谢。

3 个答案:

答案 0 :(得分:3)

你没有归还任何东西。您需要在语句lambda中返回值。您还需要用大括号包装语句以在lambda中使用多个语句。您也不能将条件运算符视为表达式;它需要是一个声明。

他们使用相同的修复方法修复。

folderList = (List<SPFolder>)folderList.OrderBy(folder => {
    Object x = folder.GetProperty("OrderFolderBy"); 
    return x == null ? 0 : x;}).ToList();

那就是说,你可以用一个表达来完成整个事情;没有必要使用多个语句:

folderList = folderList.OrderBy(folder => folder.GetProperty("OrderFolderBy") as int?).ToList();

也没有理由进行演员表演。该列表应该已经是合适的类型,并且null0都先于其他数字,因此根本没有真正的理由进行空检查。

答案 1 :(得分:2)

你需要大括号,因为你在lambda中有两个语句,你还需要为object运算符<{1}}转换为<{1}}

? :

答案 2 :(得分:1)

您可以使用空合并运算符x来避免使用??的中间分配。

folderList = folderList.OrderBy(
    folder => folder.GetProperty("OrderFolderBy") ?? (object)0)
    .ToList();