C# LINQ查询错误中的匿名函数

C# LINQ查询错误中的匿名函数,c#,linq,anonymous-function,C#,Linq,Anonymous Function,以下是我正在尝试实现的代码: var query = from line in thedata orderby () => { int a = line.IndexOf("Score=\""); if (line[a + "Score=\"".Length + 1] == '-') { return int.Par

以下是我正在尝试实现的代码:

var query = from line in thedata
            orderby () =>  {
                int a = line.IndexOf("Score=\"");
                if (line[a + "Score=\"".Length + 1] == '-') {
                    return
                        int.Parse(line[a + "Score=\"".Length + 1].ToString()
                      + line[a + "Score=\"".Length + 2]);
                }

                return int.Parse(line[a + "Score=\"".Length + 1].ToString());
            }
            select line;
其中
数据是字符串列表


编译器在
orderby上显示错误(无法推断类型参数)。如何重写此函数以解决此错误?另外,在这种情况下,有没有更好的方法来获取负数?

查询表达式不支持这种语法

您应该直接调用
OrderBy

var query = data.OrderBy(line => { ... });
为了解决您的“有更好的方法吗”问题,我们可以这样做:因为分数显然总是一个位数(前面可能有一个
-
),我们可以使用正则表达式来提取分数,用
let
定义一个范围变量,然后按它排序:

// With a positive look-behind assertion for Score="
// Capture:
//  an optional minus
//  then
//  a digit
Regex score = new Regex("(?<=Score=\")-?\\d");

string[] thedata = new[] { "Score=\"5\"", "Score=\"-2\"" };

var query = from line in thedata
            let scoreAsString = score.Match(line).Value
            orderby int.Parse(scoreAsString)
            select line;

foreach (var outputLine in query)
{
    Console.WriteLine(outputLine);
}

正向查找后断言
(?大括号是我的函数?错误是什么意思?编译器正在尝试编写
OrderBy(line=>()=>{…})
。查询中的表达式是lambda表达式的主体。如果它可以超过两个字符(20或-10)?@soandos put a
+
在正则表达式定义中的
\\d
之后(表示“一个或多个”)
Score="-2"
Score="5"