2010-12-16 30 views
5

Tôi đang sử dụng LINQ to DataTable. Làm thế nào tôi có thể áp dụng như nhà điều hành trong mệnh đề where. Tôi muốn thực hiện tìm kiếm trên dữ liệu giống như chúng ta có toán tử trong SQL.Giống như toán tử trong LINQ to DataTable?

Tôi đã tìm kiếm và thử mã sau nhưng đã gặp lỗi: Phương thức 'Boolean Like (System.String, System.String)' không thể được sử dụng trên máy khách; nó chỉ để dịch sang SQL.

var details = from addresses in dt.AsEnumerable() 
    where SqlMethods.Like(prefixText, prefixText + "%") || SqlMethods.Like(prefixText, "%" + prefixText + "%") 
    select (string) addresses["Details"];      

return details.ToArray(); 

Trả lời

2

Sẽ liên kết này Cứu giúp? Linq to SQL like Operator

+0

bài đăng này hiển thị 2 cách. .contain không trả về kết quả chính xác và SqlMethods chỉ hoạt động với SQL. Suyppose Tôi có các giá trị ABC, ABC và Company, BAC, ABC Associates. Sử dụng chứa trả về ngay cả BAC, nếu tôi vượt qua nó sẽ trả về tất cả chứ không phải BAC. xin vui lòng hướng dẫn. - – haansi

4

Tốt nhất có thể viết lại nó như là một regex việc sử dụng

where yourRegex.IsMatch(row.SomeValue) 

Hoặc nếu nó chỉ là bắt đầu với các truy vấn:

where row.SomeValue.StartsWith(prefix) 
+0

Cảm ơn Marc, tôi xin lỗi tôi không biết về biểu thức điều tiết. Bạn có thể vui lòng hướng dẫn những gì sẽ được biểu hiện thường xuyên cho sql này, nơi clasue "nơi tên công ty như @string + '%' hoặc tên công ty như '%' + @ string + '%'"; Cảm ơn – haansi

+1

@haansi - không cần regex ở đó; chỉ cần sử dụng nơi row.CompanyName.Contains (someName) –

+0

@Marc Tôi đã thử nó trước đó nhưng nó không trả lại kết quả chính xác. Suyppose Tôi có các giá trị ABC, ABC và Company, BAC, ABC Associates. Sử dụng nó trả về ngay cả BAC, nếu tôi vượt qua nó sẽ trả về tất cả chứ không phải BAC. xin vui lòng hướng dẫn. – haansi

3
var details = from addresses in dt.AsEnumerable() 
       where addresses.Field<string>("Details").StartsWith(prefixText) 
       || addresses.Field<string>("Details").Contains(prefixText) 
       select addresses.Field<string>("Details"); 
+0

chứa không trả lại kết quả chính xác. Suyppose Tôi có các giá trị ABC, ABC và Company, BAC, ABC Associates. Sử dụng nó trả về ngay cả BAC, nếu tôi vượt qua nó sẽ trả về tất cả chứ không phải BAC. xin vui lòng hướng dẫn. - - – haansi

Các vấn đề liên quan