我有以下 linq 到实体查询
Dim results = (From t In ctx.events
Where t.date >= dStartDate.Date And t.date <= dEndDate.Date
Order By t.time
Select New With {
t.symbol,
t.date, t.time,
t.description,
t.domestic_call_num,
t.web_url}).ToList()
我想限制返回结果,以便我只获得 t.symbol 值中不包含数字的结果。 我不确定如何实现这一点,因为我尝试过的方法不起作用
最佳答案
doesn't contain a number in its value
假设你的意思是:
symbol
是一个字符串。- 包含一个数字字符。
然后,如果这是在客户端上完成的)一个简单的正则表达式就可以工作:
Dim results = (From t In ctx.events
Where t.date >= dStartDate.Date And t.date <= dEndDate.Date
Where Not Regex.IsMatch(t.symbol, "\d")
Order By t.time
Select New With {
t.symbol,
t.date, t.time,
t.description,
t.domestic_call_num,
t.web_url
}).ToList()
但是,这不太可能(EF 提供程序可以实现正则表达式)在客户端工作。接受一组特定的数字(例如,仅西方语言的阿拉伯数字)会使问题变得更容易:请参阅其他 answer .
服务器上更通用的解决方案可能取决于您正在使用的提供商的函数(或实体 SQL)的详细信息。除非过滤掉如此大比例的行,从而产生影响(要传输更多数据),否则混合解决方案是可能的。在服务器上进行尽可能多的过滤,然后在本地执行其余的操作(如果我的 VB 语法正确的话):
Dim results = (from s in (
From t In ctx.events
Where t.date >= dStartDate.Date And t.date <= dEndDate.Date
Order By t.time
Select New With {
t.symbol,
t.date, t.time,
t.description,
t.domestic_call_num,
t.web_url
}).ToEnumerable()
Where Not Regex.IsMatch(s.symbol, "\d")
Select s
).ToList()
关于vb.net - 删除 linq to 实体查询中带有数字的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16913046/