2012-06-19 78 views
7

Trong một trong các trang của tôi, tôi cần phải kiểm tra xem các thông tin đã nhập về một khách hàng bao gồm sao chép PAN NO,Email,Mobile No mà có thể đã được nhập previously.Currently tôi đang cố gắng sử dụng nó Linq To SQL tuyên bố nàyLINQ truy vấn để kiểm tra trùng lặp giá trị

var duplicate = (from dup in dt.Data_Customer_Logs 
        where dup.cPanGirNo == panno 
          || dup.cEmail == email 
          || dup.nMobileNo.ToString() == mobno 
    select dup).Any(); 

Nó hoạt động nhưng bất cứ ai cũng có thể giúp tôi về phương pháp chính xác để giải quyết vấn đề của tôi. Ngoài ra nếu không có hồ sơ tìm thấy kết quả sẽ là gì. Mọi đề xuất đều được hoan nghênh.

+1

chính xác những gì bạn có ý nghĩa bởi "nó không làm việc"? –

+0

@ ErenErsönmez Tôi đã thử bằng cách chuyển id email trùng lặp nhưng nó không thực hiện phần "nếu tìm thấy bản ghi". – freebird

+0

nó nên hoạt động, nhưng có thể có vấn đề liên quan đến trường hợp hoặc hàng đầu/dấu cách không gian –

Trả lời

5
bool duplicateExists = dt.Data_Customer_Logs.Any(x => 
         x.cPanGirNo == panno 
         || x.cEmail == email 
         || x.nMobileNo.ToString() == mobno); 

Đây là một chút bụi nếu bạn chỉ muốn biết nếu hồ sơ đó tồn tại hay không. Và tôi nghĩ rằng nó sẽ tránh mang lại nhiều bản ghi về phía máy khách và sau đó đang thực hiện IEnumerable<T>.Any về kết quả.

Nếu bạn cũng cần phải lấy lại hồ sơ phù hợp với các tiêu chuẩn, bạn có thể sử dụng IQueryable<T>.Where:

var duplicates = dt.Data_Customer_Logs.Where(x => 
         x.cPanGirNo == panno 
         || x.cEmail == email 
         || x.nMobileNo.ToString() == mobno); 
if(duplicates.Any()) 
{ 
    // use duplicates... 
    foreach(var dup in duplicates) 
    { 
     //use dup.cEmail, dup.nMobileNo, etc. 
+0

Tôi đã không sử dụng các biểu thức lambda trước đây, bạn có thể giải thích cho tôi một chút về truy vấn bạn đã sử dụng hay không.Cảm ơn đã giúp đỡ. – freebird

+0

Chắc chắn. Mọi thứ trong 'Any' là một biểu thức lambda. Biểu thức lambda ở đây phục vụ như một hàm như 'bool myFunction (T x)'. Chúng tôi không phải chỉ định rõ ràng loại 'x' (T) nhờ vào tính năng suy luận kiểu của C#. –

+0

Ngoài ra Nếu tôi tìm thấy hồ sơ làm thế nào để tôi nhận được chúng, tôi có nghĩa là làm thế nào để sử dụng IEnumerable để nhận được kết quả, một ví dụ nhỏ sẽ là tốt, đủ cho tôi. Cảm ơn rất nhiều. – freebird

2

thử này

var duplicate = (from dup in dt.Data_Customer_Logs 
       where dup.cPanGirNo == panno 
         || dup.cEmail == email 
         || dup.nMobileNo.ToString() == mobno 
select dup).FirstOrDefault(); 

if(duplicate != null && duplicate.Any()) 
    //here logic of what should happend if there is something in db 
+0

Ok vì vậy bạn đang đề nghị tôi kiểm tra trước tiên nếu nó là null hay không và sau đó sử dụng Any(), tôi có thể nhận được tất cả các hồ sơ được tìm thấy.Cảm ơn. – freebird

+0

bạn nên kiểm tra null đầu tiên luôn luôn là thực hành tốt để tránh NullReferenceException – harry180

+0

Nhưng Any() trả về true hoặc false, vì vậy nếu nó là null nó sẽ ném một exception.Not chắc chắn. – freebird

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