2010-04-29 53 views
0

我想根據子對象的條件過濾一組記錄。這將編譯好的LINQ搜索只允許等效

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表達式到類型「串」,因爲它不是一個委託類型 委託「System.Func」呢不採取「1」參數 操作「< =」不能應用於類型「串」和「串」

的操作數!=好的工作,通過任何形式的比化經營小於或大於n失敗。

回答

2

這與LINQ不允許使用< =無關,但字符串不能與此運算符進行比較(但顯然可以使用相等或不相等)。

在一個控制檯應用程序編寫這樣的:

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

強調最後一行用(基本上)相同的錯誤

不能與type '串' 和'應用運營商 '< ='字符串'

現在,您可以使用< =運算符char,所以下面的類似代碼編譯並按照預期運行:

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。

+0

謝謝大家 - 本來可以發誓我已經在其他地方用字符串做了這個,這就是爲什麼我問這個問題,但也許我沒有...... (可能是想着我在動態SQL class) – 2010-04-29 10:51:10

+0

@Mad:T-SQL,VB classic,VB.NET都允許在字符串值中使用'<'等運算符。這是C#在這裏不同。 – AakashM 2010-04-29 11:02:23

1

運算符「< =」不能被應用於類型「串」和「字符串」

那麼有它的操作數。要比較排序而不是平等,請使用string.Compare

1

你可以做<和>字符而不是字符串;)使用String.Compare或者你可以編寫你自己的比較器來比較2個字符串。