2013-06-04 39 views
2

我有以下的LINQ到實體查詢在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不包含數字在其價值。 我不能確定如何做到這一點的methodsI試圖不工作

回答

0

您可以創建數字字符串數組,並簡單地檢查如果符號包含任何數字。這是C#的解決方案(含EF作品)

var digits = "1 2 3 4 5 6 7 8 9 0".Split(); 
var result = from t in ctx.events 
      where t.date >= dStartDate.Date && 
        t.date <= dEndDate.Date && 
        !digits.Any(d => t.symbol.Contains(d)) 
      orderby t.time 
      select new { 
       t.symbol, t.date, 
       t.time, t.description, 
       t.domestic_call_num, 
       t.web_url }; 

相信在VB代碼如下:

Dim digits = "1 2 3 4 5 6 7 8 9 0".Split() 
Dim result = From t In ctx.events 
      Where t.[date] >= dStartDate.[Date] AndAlso t.[date] <= dEndDate.[Date] AndAlso Not digits.Any(Function(d) t.symbol.Contains(d)) 
      Order By t.timeNew From { _ 
       t.symbol, _ 
       t.[date], _ 
       t.time, _ 
       t.description, _ 
       t.domestic_call_num, _ 
       t.web_url _ 
      } 
2

不包含它的價值

一些假設你的意思是:

  1. symbol是一個字符串。
  2. 包含一個數字字符。

然後,如果這個正在客戶端上完成的)一個簡單的正則表達式將工作:

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() 
+0

正則表達式將與EF工作? –

+1

@lazyberezovsky:糟糕:不,這將需要執行的東西客戶端。然而,我不確定 - 沒有提供者的知識 - 可以避免(不止需要SQL LIKE)。 – Richard

+0

是的,正則表達式在查詢中不起作用。我使用mySQL作爲提供者 – dinotom