2009-09-03 58 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)) 
相关问题