2012-06-19 239 views
7

在我的網頁之一,我需要檢查,如果有關客戶輸入的信息由複製可能已進入previously.Currently我用這Linq To SQL聲明Linq查詢是否有重複值

var duplicate = (from dup in dt.Data_Customer_Logs 
        where dup.cPanGirNo == panno 
          || dup.cEmail == email 
          || dup.nMobileNo.ToString() == mobno 
    select dup).Any(); 
嘗試它 PAN NO,Email,Mobile No

它正在工作,但任何人都可以幫助我解決我的問題是什麼正確的方法。如果沒有記錄發現會是什麼結果。 歡迎任何建議。

+1

你到底是「它不工作」是什麼意思? –

+0

@ErenErsönmez我嘗試通過傳遞重複的電子郵件ID,但它沒有執行「如果找到記錄」部分。 – freebird

+0

它應該可以工作,但可能存在與大小寫或前導/尾隨空格有關的問題 –

回答

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

這是一點點清潔劑,如果你只是想知道是否存在,或者沒有這樣的記錄。我認爲它會避免將多條記錄帶回客戶端,然後IEnumerable<T>.Any做結果。

如果您還需要找回符合條件的記錄,你可以使用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

我之前沒有使用lambda表達式,能否向我解釋一下您使用的查詢。謝謝您的幫助。 – freebird

+0

當然。 'Any'中的所有內容都是lambda表達式。這裏的lambda表達式用作像'bool myFunction (T x)'這樣的函數。感謝C#的類型推斷功能,我們不必明確指定'x'(T)的類型。 –

+0

另外如果我發現記錄我怎麼得到它們,我的意思是如何使用IEnumerable獲取結果,一個小例子對我來說就足夠了。感謝很多。 – freebird

2

試試這個

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

好,所以你建議我首先檢查它是否爲null,然後使用Any(),我可以獲取所有找到的記錄。謝謝。 – freebird

+0

你應該先檢查null總是避免NullReferenceException – harry180

+0

但是Any()返回true或false,所以如果它爲null,它會拋出異常。不確定。 – freebird