var list =
from a in TableA
select new B {
Count = a.TotalCount,
Title = a.Title
};
Vous nouveau une instance de B dans votre clause select, et affecter les propriétés en utilisant la fonction d'affectation de propriété en ligne en C# 3.0.
Les avantages du mappage en ligne proviennent de l'exécution différée de votre instruction Linq. Linq mappera l'instruction modifiée et l'exécutera à partir de votre IQueryable. Par exemple:
public class ClassA
{
public int TotalCount;
public string Title;
}
public class ClassB
{
public int Count;
public string Title;
}
public IQueryable<ClassB> FetchAllOfClassB()
{
var list =
from a in TableOfClassA
select new ClassB {
Count = a.TotalCount,
Title = a.Title
};
return list.AsQueryable();
}
Techniquement, le AsQueryable()
est un peu redondant. Parfois, je l'utilise pour en faire un point, d'autres disent que c'est absolument nécessaire. Néanmoins, l'objet liste lui-même est IQueryable de ClassB.
Ensuite, vous pouvez appeler FetchAllOfClassB()
plus haut dans la chaîne et utiliser IQuerable. C'est assez lisse et efficace.
Votre question n'est pas claire ... quelle est la relation entre A et B? –
Essentiellement, ils représentent la même chose. Dans mon cas, A est une classe générée par Linq à Sql lorsque j'ai créé une classe Linq to Sql et ajouté une table à celle-ci. Parce que la classe A a des dépendances Linq et Linq to Sql, je ne veux pas l'exposer à mes applications, donc je crée la classe B, qui n'a pas de dépendances. J'ai donc besoin de remplir une liste d'instances de classe B à partir d'une liste d'instances de classe A. – Jeremy