2009-09-03 56 views
6

我有這樣的功能:在.NET框架內類似於SQL IN語句的東西?

public bool IsValidProduct(int productTypeId) 
    { 
     bool isValid = false; 

     if (productTypeId == 10 || 
      productTypeId == 11 || 
      productTypeId == 12) 
     { 
      isValid = true; 
     } 

     return isValid; 
    } 

,但我不知道是否有把它寫一個簡單的方法,如:

public bool IsValidProduct(int productTypeId) 
    { 
     bool isValid = false; 

     if (productTypeId.In(10,11,12)) 
     { 
      isValid = true; 
     } 

     return isValid; 
    } 

我知道我可以寫一個擴展方法來處理這個問題,我只是好奇,如果已經有東西了,或者有更好的方法來寫它。

回答

5

不,我不這麼認爲,但是你可以寫一個像這樣的擴展方法,它允許你的代碼完全按照書面的方式工作。

public static bool In<T>(this T source, params T[] args) { 
    return args.Contains(source); 
} 

儘管數組開銷有點多。您可能希望爲較小的固定數量的參數添加特殊情況。

+0

希望這已經在linq中,但這有助於使代碼更加簡潔和簡潔 – Nick 2009-09-04 15:14:37

11
new [] {10, 11, 12}.Contains(productTypeId) 
0

您可以使用.NET 3.5中的Contains擴展方法。它適用於所有類型的枚舉:

if (new [] { 10, 11, 12 }.Contains(productTypeId)) 
{ 
    ... 
} 
1

我不認爲有一個在框架的任何所以你必須編寫自己的擴展方法。你可以使用LINQ得到最接近的是一樣的東西:


if(new[] { 10, 11, 12 }.Contains(productTypeId)) { ... } 
3

嗯,你可以這樣做:

public bool IsValidProduct(int productTypeId) 
{ 
    bool isValid = false; 

    if (new[] {10,11,12}.Contains(productTypeId)) 
    { 
     isValid = true; 
    } 

    return isValid; 
} 

,或者如果你希望同樣的事情短:

public bool IsValidProduct(int productTypeId) 
{ 
    return (new[] {10,11,12}.Contains(productTypeId)); 
} 
2

你可以沿線做點什麼:

new int[] { 10,11,12 }.Contains(productTypeID); 

或進一步走線沿線的一個創造INT擴展:

public static bool In(this int i, params int[] ints) 
{ 
    return ints.Contains(i); 
} 

用的使用:

if (productTypeID.In(10,11,12)) { ... } 

我不會說他們是最有效的,但有可能是的。

0

var validIds = new [] {10,11,12};
validIds.Contains(productId);

0

如果你想要的數字都在一個範圍內,但不是「IN」functionallity,但是你會覺得它很有用。

if (Enumerable.Range(10, 3).Contains(productTypeId)) 
相關問題