2010-04-20 84 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())); 
相关问题