Korzystając z prostego przykładu poniżej, jaki jest najlepszy sposób na zwrócenie wyników z wielu tabel za pomocą Linq do SQL?
Powiedzmy, że mam dwie tabele:
Dogs: Name, Age, BreedId
Breeds: BreedId, BreedName
Chcę zwrócić wszystkie psy z nimi BreedName
. Powinienem sprawić, by wszystkie psy używały czegoś takiego bez problemu:
public IQueryable<Dog> GetDogs()
{
var db = new DogDataContext(ConnectString);
var result = from d in db.Dogs
join b in db.Breeds on d.BreedId equals b.BreedId
select d;
return result;
}
Ale jeśli chcę psów z rasami i spróbuję tego, mam problemy:
public IQueryable<Dog> GetDogsWithBreedNames()
{
var db = new DogDataContext(ConnectString);
var result = from d in db.Dogs
join b in db.Breeds on d.BreedId equals b.BreedId
select new
{
Name = d.Name,
BreedName = b.BreedName
};
return result;
}
Teraz zdaję sobie sprawę, że kompilator nie pozwoli mi zwrócić zestawu anonimowych typów, ponieważ oczekuje Psy, ale czy istnieje sposób, aby to zwrócić bez konieczności tworzenia niestandardowego typu? Czy też muszę utworzyć własną klasę DogsWithBreedNames
i określić ten typ w zaznaczeniu? Czy jest inny łatwiejszy sposób?
foreach (var cust in query) Console.WriteLine("id = {0}, City = {1}", cust.CustomerID, cust.City);