2009-09-03 5 views
6

Ich habe diese Funktion:Etwas Ähnliches wie sql IN-Anweisung in .NET Framework?

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

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

     return isValid; 
    } 

aber ich frage mich, ob es ein einfacherer Weg, es zu schreiben, wie zum Beispiel:

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

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

     return isValid; 
    } 

Ich weiß, ich könnte eine Erweiterungsmethode schreiben, dies zu umgehen, Ich bin nur neugierig, ob es da draußen schon etwas gibt oder ob es einen besseren Weg gibt, es zu schreiben.

Antwort

5

Nein, ich glaube nicht, aber Sie könnten eine Erweiterungs-Methode wie folgt schreiben, die es Ihrem Code ermöglicht, genauso zu arbeiten wie geschrieben.

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

Die Array-Overhead ist ein bisschen viel obwohl. Wahrscheinlich möchten Sie spezielle Fälle für eine kleinere feste Anzahl von Parametern hinzufügen.

+0

wünschte, dies wäre bereits in linq, aber dies hilft, den Code schön und prägnant zu machen – Nick

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

Sie können die Contains-Erweiterungsmethode von .NET 3.5 verwenden. Es funktioniert auf allen zählbaren Arten:

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

Ich glaube nicht, dass es im Rahmen alles ist, so dass Sie Ihre eigene Erweiterungsmethode schreiben müssen. Die nächstgelegene Sie mit Linq bekommen kann, ist so etwas wie:


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

Hmm, können Sie dies tun:

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

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

    return isValid; 
} 

oder wenn Sie die gleiche Sache kürzer wollen:

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

Sie könnten tun Sie etwas in der Art von:

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

oder gehen weiter eine eine Erweiterung für int entlang der Linien erstellen:

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

Mit einer Verwendung von:

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

Ich würde ja die effizienteste, aber möglich nicht sagen, sie sind.

0

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

0

Dies würde funktionieren, wenn die gewünschten Zahlen alle in einem Bereich sind, nicht ganz "IN" -Funktionalität, aber Sie können es nützlich finden.

if (Enumerable.Range(10, 3).Contains(productTypeId)) 
Verwandte Themen