2014-02-11 27 views
3

要檢查,如果在ClientAccessCode表中存在的任何記錄,如果沒有返回false返回false ...如何如果表中不存在的記錄

if (!CheckAccessCodeExists()) 
{ 
    Console.WriteLine("Client Access code does not exist"); 
    throw new ConfigurationErrorsException("Client Access code does not exist"); 
} 

private static bool CheckAccessCodeExists() 
{ 
    using (EPOSEntities db = new EPOSEntities()) 
    { 
     ClientAccountAccess clientAccess = db.ClientAccountAccesses 
       .OrderByDescending(x => x.Id) 
       .Take(1) 
       .Single(); 

     if (clientAccess != null) 
     { 
      return true; 
     } 
     return false; 
    } 
} 

//這是萎靡不振的序列不包含任何元素,在lamba表達式,那麼我怎麼才能返回false呢?也許使用.Any()?

感謝

編輯 那十分感謝您的幫助球員金正日現在標記的答案,也是另一個查詢,如果我有

ClientAccountAccess clientAccess = db.ClientAccountAccesses 
        .OrderByDescending(x => x.Id) 
        .Take(1) 
        .Single(); 

if (clientAccess != null) 
{ 
    db.DeleteObject(clientAccess); 
} 

我怎麼能重構這個說事有條理像

if (db.ClientAccountAccesses.Any()) 
{ 
    db.DeleteObject(//what does in here do I have to use above code to get record to delete?); 
} 
+0

要刪除所有內容嗎? – James

+0

以及考慮只會有一個記錄在表中,是刪除記錄,但不是實際的表 – John

+0

@約翰看到更新的答案 –

回答

0
private static bool CheckAccessCodeExists() 
    { 
     using (EPOSEntities db = new EPOSEntities()) 
     { 
      var item = db.ClientAccountAccesses.FirstOrDefault(); 
      if(item != null) 
      { 
       db.Remove(item); 
       db.SaveChanges(); 
       return true;     
      } 

      return false; 
     } 
    } 
+0

謝謝詹姆斯請參閱編輯 – John

+0

更新的解決方案爲您的編輯。羽絨投票人請註釋。 – James

+0

私人靜態無效? –

-1
private static bool CheckAccessCodeExists() 
    { 
     using (EPOSEntities db = new EPOSEntities()) 
     { 
      var item = db.ClientAccountAccesses.FirstOrDefault(); 
      if (item != null) 
      { 
       db.DeleteObject(item); 
       db.SaveChanges(); 
       return true; 
      }    
     } 
     return false; 
    } 
+0

感謝nikola請參閱編輯 – John

+0

@John看到編輯的答案,謝謝 –

+0

似乎浪費執行3個查詢時,你可以逃脫2,這也檢查是否存在*任何*記錄存在,OP正在尋找檢查是否*特定的*記錄已經存在。 – James

0

問題是Single預計有至少集合中的一個項目,如果它找不到1,則會引發異常。如果您的收藏可能沒有記錄,那麼您應該使用SingleOrDefault - 這將返回您正在使用的類型的默認值,在您的情況下,這將返回null

ClientAccountAccess clientAccess = db.ClientAccountAccesses 
    .OrderByDescending(x => x.Id) 
    .Take(1) 
    .SingleOrDefault(); 

if (clientAccess != null) 
{ 
    db.DeleteObject(clientAccess); 
} 
+0

是的,你正在閱讀過去問題的字面文本,並越過它的核心。我想補充一點,你可以在一個try-catch中包裝Single(我不會推薦*這種方法,但很好地瞭解你的選擇)。 – Casey

+0

似乎你爲了執行刪除單個記錄並且也沒有db.SaveChanges()方法而進行4個查詢。 –

+0

@NikolaMitev請指出4個查詢,因爲我只看到1(2,當你打電話給SaveChanges時)?是的,我特意將它遺漏了,因爲那不是我想要展示的 – James

相關問題