2009-08-05 9 views
3

Comment l'utiliser dans .NET 2.0 ...?Conversion de LINQ en .NET 2.0

[DataObjectMethod(DataObjectMethodType.Select)] 
public IEnumerable<OperatorField> FindByType(String type) 
{ 
    // return only selected type 
    return (from ce in this.OperatorFields where ce.Type == type select ce).ToList(); 
} 

J'utiliser dans un 3.5 projets, mais maintenant j'ajouter de nouvelles fonctionnalités à un vieux projet que je ne peux pas (à ce moment) passer à 3.5.


Je viens de faire ceci:

[DataObjectMethod(DataObjectMethodType.Select)] 
public IEnumerable<OperatorField> FindByType(String type) 
{ 
    // return only selected type 
    //return (from ce in this.OperatorFields where ce.Type == type select ce).ToList(); 

    List<OperatorField> r = new List<OperatorField>(); 

    foreach (OperatorField f in this.OperatorFields) 
     if (f.Type == type) 
      r.Add(f); 

    return r; 
} 
+0

Si vous jetez un oeil à l'IL, est-il vraiment une différence? Pouvez-vous mesurer la performance des deux et voir si l'un ou l'autre est plus rapide? – StingyJack

+0

2 min et 4 réponses identiques :) – cwap

+0

@StingyJack: L'IL ne sera pas du tout similaire, car la version linq aura des appels à 'System.Linq.Enumerable.Where()', 'System.Linq.Enumerable. Sélectionnez() ', et' System.Linq.Enumerable.ToList() ', tandis que l'autre version appellera' IEnumerable.GetEnumerator() 'et parcourra le résultat. –

Répondre

12

Pouvez-vous toujours utiliser C# 3.0 mais pas .NET 3.5? Si tel est le cas, conservez le code tel quel et utilisez LINQBridge, qui correspond aux objets LINQ to Objects implémentés pour .NET 2.0.

Sinon, faites ceci:

[DataObjectMethod(DataObjectMethodType.Select)] 
public IEnumerable<OperatorField> FindByType(String type) 
{ 
    List<OperatorField> list = new List<OperatorField>(); 
    foreach (OperatorField ce in OperatorFields) 
    { 
     if (ce.Type == type) 
     { 
      list.Add(ce); 
     } 
    } 
    return list; 
} 
+0

2.0 seulement :(au moins jusqu'à la prochaine version afin que nous puissions dire aux clients qu'ils ont besoin de mettre à jour le cadre.J'ajoute juste ce que je pense, une solution – balexandre

+0

+1 pour LINQBridge –

+5

@balexandre: Non, vous me confondez. Vous pouvez utiliser les fonctionnalités de Visual Studio 2008 et C# 3.0 mais toujours cibler .NET 2.0 Vous n'avez pas besoin que vos clients mettent à niveau le framework pour que cela fonctionne –

1

Quelque chose comme ça peut-être?

IList<OperatorField> col = new List<OperatorField>(); 
foreach (OperatorField f in this.OperatorFields) 
{ 
    if (f.Type == type) 
     col.Add(f); 
} 
return col; 
1
[DataObjectMethod(DataObjectMethodType.Select)] 
public IEnumerable<OperatorField> FindByType(String type) 
{ 
    foreach (OperatorField ce in this.OperatorFields) 
    { 
     if (ce.Type == type) 
      yield return ce; 
    } 
} 
0

Pensez à ce que la déclaration fait, il est itérer sur chaque élément dans la propriété OperatorFields, vérifier le type, puis en ajoutant l'élément à une liste avant de retourner la liste terminée.

Vous avez

Create new list 
For each item in OperatorFields 
    if item.Type equals type 
    add item to list 

return list 
Questions connexes