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"