Come faccio a caricare una parte di classe utilizzando LINQ to SQL, senza classe anonima o classe aggiuntiva?
-
26-09-2019 - |
Domanda
class Test {
int Id{get;set;}
string Name {get;set;}
string Description {get;set;}
}
//1)ok
context.Tests.Select(t => new {t.Id, t.Name}).ToList().Select(t => new Test{Id = t.Id,
Name = t.Name});
//2)ok
class TestPart{
int Id{get;set;}
string Name {get;set;}
}
context.Tests.Select(t => new TestPart{Id = t.Id,
Name = t.Name}).ToList().Select(t => new Test{Id = t.Id,
Name = t.Name});
//3)error Explicit construction of entity type 'Test' in query is not allowed.
context.Tests.Select(t => new Test{Id = t.Id,
Name = t.Name}).ToList();
C'è un modo per utilizzare terza variante?
Soluzione
Se la classe di test non viene utilizzato per la scrittura dei dati, è possibile disattivare l'oggetto di monitoraggio rimuovendo la chiave primaria nella dbml. Se le istanze di Test non vengono monitorati per i cambiamenti, allora siete liberi di new-up come molti come ti piace nella query.
Si supponga che si desidera avere una classe di test che si può carico parziale, e una classe di test che è possibile scrivere indietro con. Basta eliminare la tabella di prova nella finestra di progettazione per due volte, e togliere la chiave primaria da uno di loro.
Altri suggerimenti
Fornire una conversione implicita su entrambi TestPart o Test dovrebbe fare il trucco qui. Si potrebbe anche prendere in considerazione derivante dal test TestPart, come prova viene semplicemente estendendo TestPart. Con questo, non c'è bisogno di definire la conversione implicita.