LINQ搜索仅允许等效

时间:2010-04-29 10:34:44

标签: linq linq-to-sql

我正在尝试根据子对象的条件过滤一组记录。编译好了

recordList = recordList.Where(r => r.Areas.Where(a => a.Area == "Z").Count() > 0);

但这不是

recordList = recordList.Where(r => r.Areas.Where(a => a.Area <= "Z").Count() > 0);

给出这些错误 无法将lambda表达式转换为类型'string',因为它不是委托类型 委托'System.Func'不带'1'参数 运算符'&lt; ='不能应用于'string'和'string'

类型的操作数

!=工作正常,任何小于或大于操作失败。

3 个答案:

答案 0 :(得分:2)

这与LINQ无关,不允许使用&lt; =,但是这些字符串无法与此运算符进行比较(但显然可以使用相等或不相等)。

在控制台应用中写这个:

string strA = "jamie";
string strB = "Z";
Console.WriteLine(strA != strB);
Console.WriteLine((bool)(strA <= strB));

用(基本上)相同的错误

强调最后一行
  

无法对类型应用运算符'&lt; ='   'string'和'string'

现在,您可以在char上使用&lt; =运算符,因此下面的类似代码会按预期编译并运行:

char charA = 'J';
char charB = 'Z';
Console.WriteLine(charA<=charB);

所以也许你想要的是:

recordList = recordList.Where(r => r.Areas.Where(a => a.Area[0] <= 'Z').Count() > 0);

HTH。

答案 1 :(得分:1)

  

运算符'&lt; ='不能应用于'string'和'string'类型的操作数

那就是它。要比较排序,而不是相等,请使用string.Compare

答案 2 :(得分:1)

你可以做&lt;和&gt;在字符上但不在字符串上;)使用String.Compare或者您可以编写自己的比较器来比较2个字符串。