2010-09-27 3 views

Répondre

2

Peut-être que vous devriez utiliser un pour chaque boucle, puis utiliser votre requête?

(En fait, il est difficile de dire ce qu'il faut faire mieux dans cette situation sans connaître votre code)

+0

Pour mon scénario spécifique, la plus propre et la plus sensée à faire serait une combinaison d'une boucle et linq. Je pense que j'ai essayé d'abuser de Linq. – c0D3l0g1c

+0

Oui, il m'arrive aussi de temps en temps. Rester simple! :) – sloth

2

Voici une façon d'accéder aux valeurs des paramètres dans votre requête LINQ. Je ne pense pas que vous pouvez utiliser les valeurs hors de dire où en choisir plus tard: list.Where(...).Select(...)

List<MyClass> list; // Initialize 

Func<MyClass, bool> fun = f => 
{ 
    int a, b; 
    f.MyMethod(out a, out b); 
    return a == b; 
}; 
list.Where(fun); 

Où MyClass est mis en œuvre quelque chose comme ça;

public class MyClass 
{ 
    public void MyMethod(out int a, out int b) 
    { 
     // Implementation 
    } 
} 
1

Il utilise Tuple<T1,T2> de .NET 4.0, mais peut être adapté pour les versions antérieures:

//e.g., your method with out parameters 
void YourMethod<T1,T2,T3>(T1 input, out T2 x, out T3 y) { /* assigns x & y */ } 

//helper method for dealing with out params 
Tuple<T2,T3> GetTupleOfTwoOutValues<T1,T2,T3>(T1 input) 
{ 
    T2 a; 
    T3 b; 
    YourMethod(input, out a, out b); 
    return Tuple.Create(a,b); 
} 

IEnumerable<Tuple<T2,T3>> LinqQuery<T1,T2,T3>(IEnumerable<T1> src, T2 comparisonObject) 
{ 
    return src.Select(GetTupleOfTwoOutValues) 
      .Where(tuple => tuple.Item1 == comparisonObject); 
} 
Questions connexes