2010-06-14 4 views
0

J'ai une méthode (C#)Liste en C# - passer plusieurs entrées comme un seul objet

public void MethodName(List<Order> Order, int ID) 

Je dois passer cela à une page principale, où je sais passer valeur entière à ID, je suis pas en mesure de transmettre plusieurs éléments dans une seule liste.

La Liste de commandes devrait avoir deux entrées numériques, (ie. Order.number1 et Order.number2)

Comment dois-je passer une seule liste en tant que paramètre à cette méthode contenant plusieurs entrées de nombre1 et 2, donc que je peux boucler thro 'et le trouver.

Merci.

+0

Votre question n'est pas très claire. Vous devriez inclure un exemple de code source pour nous aider à mieux comprendre votre problème. –

+0

Pourriez-vous essayer de reformuler "je sais que transmettre la valeur entière à l'ID, je ne suis pas en mesure de transmettre plusieurs éléments dans une seule liste". Je ne comprends pas ce que vous essayez de dire ici. En outre, à quelle sorte de page faites-vous référence lorsque vous dites "page principale"? Page Web? ASP.NET? ASP.NET MVC? Autre chose? – Rune

+0

J'utilise la méthode webservice et j'appelle ce service Web dans une application console pour tester, je ne suis pas sûr comment passer des éléments de la liste en tant que paramètre à une méthode. – Karthick

Répondre

0

Vous pouvez utiliser une classe qui implémente l'interface IList. Tels que la liste.

Vous pouvez faire quelque chose comme:

List<Order> myOrders = new List<Order>(); 

passent ensuite ceci dans la méthode.

Où Order est l'objet de la commande auquel vous essayez d'accéder.

0

Vous pouvez retourner une liste de votre méthode (si je comprends bien vous correctement)

Modifié maintenant que je pense que je comprends mieux

public void MethodName(List<item> order, int ID) { 
foreach(Order O in Order) 
    { 
    RunQuery(O.num1, O.num2); 
    } 
} 

Sans une certaine connaissance de la façon dont votre base de données est mis en place il est difficile d'écrire le code de la requête; Je vous laisse ça.

+0

Merci, je n'essaie pas de retourner une liste, j'essaie de passer le paramètre comme une liste avec plusieurs entrées à une seule liste afin que je puisse boucler thro et peupler. – Karthick

+1

Il devrait être «Liste ... Ordre O dans l'ordre» ou «Liste ordre ... article O dans l'ordre». Ni suivre les conventions de nommage, mais au moins il devrait compiler. :) –

2

Si je comprends bien, vous avez:

class Order 
{ 
    public int number1 { get; set; } 
    public int number2 { get; set; } 
    ... 
} 

List<Order> orders = new List<Order> 
{ 
    { number1 = 123, number2 = 234 }, 
    { number1 = 321, number2 = 432 } 
}; 

Vous voulez être en mesure de rechercher orders pour trouver celui où number1 == ID || number2 == ID. En supposant qu'il n'y a qu'un seul ordre avec l'ID donné ou si vous êtes OK avec la première, vous trouvez que vous pouvez faire:

public Order FindOrderById(List<Order> orders, int id) 
{ 
    foreach (Order order in orders) 
    { 
    if (order.number1 == id || order.number2 == id) 
    { 
     return order; 
    } 
    } 

    // None found. Return null, throw exception, etc. 
    return null; 
} 

... 

List<Order> orders = new List<Order> { ... }; 
Order foundOrder = FindOrderById(orders, 123); 
if (foundOrder == null) 
{ 
    //Not found 
} 
else 
{ 
    //Found 
} 

Vous pouvez également utiliser LINQ pour raccourcir ce spectaculaire. J'ai inclus quelques variations.

List<Order> orders = new List<Order> { ... }; 
int id = 123; 

// Throw exception if exactly one order was not found (none or more than one) 
Order foundOrder = orders.Single(o => o.number1 == id || o.number2 == id); 

// Return null if exactly one order was not found 
Order foundOrder = orders.SingleOrDefault(o => o.number1 == id || o.number2 == id); 

// Return all orders that matched 
IEnumerable<Order> foundOrders = orders.Where(o => o.number1 == id || o.number2 == id); 
+0

Single & SingleOrDefault acceptent les prédicats. Vous pouvez éliminer le Où dans ces deux. – Marc

+0

@ Marc: Intéressant, n'avait pas remarqué cela avant. LINQ est si succinct. –

+0

Ok, donc j'ai juste regardé du code que j'avais écrit et je l'ai utilisé comme ça. Je suppose que je n'avais pas vraiment traité cette différence dans ma tête. –

Questions connexes