var list =
from a in TableA
select new B {
Count = a.TotalCount,
Title = a.Title
};
Si aggiunge un'istanza di B nella clausola select e si assegnano le proprietà utilizzando la funzione di assegnazione di proprietà inline in C# 3.0.
I vantaggi della mappatura in linea derivano dall'esecuzione posticipata dell'istruzione Linq. Linq mapperà l'istruzione modificata e la eseguirà dal tuo IQueryable. Ad esempio:
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();
}
Tecnicamente, il AsQueryable()
è un po 'ridondante. A volte lo uso per renderlo un punto, altri dicono che è assolutamente necessario. Tuttavia, l'oggetto elenco stesso è IQueryable di ClassB.
Quindi è possibile chiamare FetchAllOfClassB()
oltre la catena e utilizzare IQuerable. È piuttosto lucido ed efficiente.
La tua domanda non è chiara ... qual è la relazione tra A e B? –
In sostanza rappresentano la stessa cosa. Nel mio caso, A è una classe generata da Linq a Sql quando ho creato una classe da Linq a Sql e ho aggiunto una tabella. Poiché la classe A ha dipendenze da Linq e Linq to Sql, non voglio esporla alle mie applicazioni, quindi creo la classe B, che non ha dipendenze. Quindi ho bisogno di compilare un elenco di istanze di classe B da un elenco di istanze di classe A. – Jeremy