2009-09-03 24 views
6

mam tej funkcji:Coś podobnego do instrukcji SQL IN w ramach .NET?

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

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

     return isValid; 
    } 

ale zastanawiam się, czy istnieje prostszy sposób, aby ją napisać, takie jak:

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

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

     return isValid; 
    } 

Wiem, że mógłbym napisać metodę rozszerzenia do obsługi tego, Jestem ciekawy, czy coś tam już istnieje, czy jest lepszy sposób, żeby to napisać.

Odpowiedz

5

Nie, nie wierzę w to, ale można napisać metodę rozszerzenia, która umożliwia pracę kodu dokładnie tak, jak jest napisana.

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

Obciążenie macierzą jest trochę za dużo. Prawdopodobnie chcesz dodać specjalne przypadki dla mniejszej stałej liczby parametrów.

+0

Żałuję, że już nie było w Linq, ale to sprawia, że ​​kod jest ładny i zwięzły – Nick

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

Możesz użyć metody rozszerzenia Contains z .NET 3.5. To działa na wszystkich typach przeliczalnych:

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

Nie sądzę, jest coś w ramach tak będziesz musiał napisać własną metodę rozszerzenia. Najbliższy można uzyskać z LINQ jest coś takiego:


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

Hmm, można to zrobić:

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

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

    return isValid; 
} 

lub jeśli chcesz to samo krótszy:

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

Mogłabyś zrób coś na wzór:

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

lub pójść dalej utworzyć rozszerzenie int wzdłuż linii:

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

Z wykorzystaniem:

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

Nie powiedziałbym, że są one najbardziej efektywne, ale możliwe, że tak.

0

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

0

To działałoby, jeśli pożądane liczby mieszczą się w zakresie, a nie funkcji "IN", ale może się okazać, że jest przydatna.

if (Enumerable.Range(10, 3).Contains(productTypeId)) 
Powiązane problemy