2010-04-20 72 views
2

我需要獲取不以字母字符開頭的記錄列表,即以數字字符或任何特殊字符開頭的記錄列表。獲取在linq中不以字母字符開頭的記錄

什麼是簡單的LINQ查詢來獲取此列表?

+0

通過LINQ到你實際上意味着LinqToSQL?因爲這裏列出的很多解決方案可能不會被轉換爲SQL。 – 2010-04-20 10:33:44

+0

我不得不說,它的Linq到SQL。 – Prasad 2010-04-20 10:37:43

+0

@Dan Diplo - 會有什麼不同?那麼LINQ表達式的結果不會是相同的,即where!char.IsLetter(n.ToCharArray()。First()) – 2010-04-20 10:46:54

回答

4
List<string> Entries = new List<string>(); 
Entries.Add("foo"); 
Entries.Add("bar"); 
Entries.Add("@foo"); 
Entries.Add("1bar"); 

var NonAlphas = (from n in Entries 
where !char.IsLetter(n.ToCharArray().First()) 
select n); 

對於Linq-to-sql,您可以通過枚舉查詢(調用ToList)來從數據庫中提取水分。從這一點開始,您的操作將針對內存中的對象,並且這些操作不會被轉換爲SQL。

List<string> Entries = dbContext.Entry.Where(n => n.EntryName).ToList(); 
var NonAlphas = Entries.Where(n => !char.IsLetter(n.First())); 
0
string[] x = new string[3]; 
x[0] = "avb"; 
x[1] = "31df"; 
x[2] = "%dfg";  

var linq = from s in x where !char.IsLetter(s.ToString().First()) select s; 
List<string> simplelist = new List<string>(linq); 
/* in simple list you have only "31df" & "dfg" */ 
3

是這樣的?

List<string> lst = new List<string>(); 
lst.Add("first"); 
lst.Add("second"); 
lst.Add("third"); 
lst.Add("2abc"); 

var result = from i in lst where !char.IsLetter(i[0]) select i; 
List<string> output = result.ToList(); 

編輯:我意識到,這裏使用正則表達式是矯枉過正,我的解決方案是不完美呢。

0

有一點需要注意的是,你不需要將字符串轉換爲chararray來使用linq就可以了。

更consise版本將是:

var list = new List<string> {"first","third","second","2abc"}; 

var result = list.Where(word => !char.IsLetter(word.First())); 
相關問題