2012-10-12 41 views
4

我有一個包含以下幾列的LINQ to SQL來返回布爾

UserID | FruitID 

我想驗證用戶名被授權在FruitID所以我寫這樣的一個表Fruits

var IsAuthorized = (from f in MyDC.Fruits 
        where f.UserID == TheUserID && f.FruitID == TheFruitID 
        select f.FruitID).SingleOrDefault(); 

所以,如果用戶被授權查詢返回一個ID,如果他沒有授權,它將返回null。然後檢查返回值是否爲空,然後根據返回值設置一個布爾值。

我想要做的是返回布爾:如果用戶被授權,那麼它應該返回true。

如何修改查詢以返回布爾值?

謝謝。

回答

15
var IsAuthorized = from (f in MyDC.Fruits 
         where f.UserID == TheUserID && f.FruitID == TheFruitID 
         select f.FruitID).SingleOrDefault() != null; 

,或者如果你希望它由基礎LINQ提供程序(例如,如果您使用的是SQL服務器)來完成,你可以使用.Any擴展方法哪個好:

var IsAuthorized = MyDC 
    .Fruits 
    .Any(f => f.UserID == TheUserID && f.FruitID == TheFruitID); 
+0

好的,感謝您的回答 – frenchie

+0

什麼將是更好的性能/好? – frenchie

+1

'.Any()'擴展方法,因爲您不會檢索整個記錄,但LINQ提供程序可能使用聚合函數。 –

12

任何( )如果源序列包含任何元素,則返回true;否則,是錯誤的。

var IsAuthorized = from (f in MyDC.Fruits 
          where f.UserID == TheUserID && f.FruitID == TheFruitID 
          select f.FruitID).Any();