Najpierw odpowiem na twoje pytanie .. następnie zająć swoją odpowiedź na komentarze. Aby odpowiedzieć na twoje pytanie, w Linq zrobiłbyś:
from p in Product
join c in Catalog on c.Id equals p.CatalogId
join m in Manufacturer on m.Id equals p.ManufacturerId
where p.Active == 1
select new { Name = p.Name, CatalogId = p.CatalogId, ManufacturerId = p.ManufacturerId, CatalogName = c.Name, ManufacturerName = m.Name };
To da ci anonimowy przedmiot z żądanymi przedmiotami. Jeśli chcesz użyć tego gdzie indziej (i nie korzystasz z obiektów dynamicznych), proponuję utworzyć model widoku i utworzyć instancję jednego z tych w twoim wyborze.
Przykład:
public class ProductInfoView
{
public string Name { get; set; }
public int CatalogId { get; set; }
public int ManufacturerId { get; set; }
public string CatalogName { get; set; }
public string ManufacturerName { get; set; }
}
from p in Product
join c in Catalog on c.Id equals p.CatalogId
join m in Manufacturer on m.Id equals p.ManufacturerId
where p.Active == 1
select new ProductInfoView() { Name = p.Name, CatalogId = p.CatalogId, ManufacturerId = p.ManufacturerId, CatalogName = c.Name, ManufacturerName = m.Name };
To sprawi przedstawieniu zapytanie powoduje trochę mniej bolesne.
Aby odpowiedzieć na Twój komentarz, robisz wiele złączeń, jeśli chcesz tylko tego produktu. Twoje kryteria zapewnią tylko trzy rzeczy
- Aktywny flag Twój produkt jest 1
- Twój produkt ma istniejący wpis katalogowy
- produkt ma istniejącego wpisu producent
Jeśli # 2 i # 3 są zbędne i niekoniecznie potrzebujesz nazw, możesz po prostu:
from p in Product
where p.Active == 1
select p
Jeśli Produkt jest modelem CRUD, możesz go głęboko wczytać, dodając informacje o producencie/katalogu lub użyć wspomnianego modelu widoku.
Powodzenia!
co się stało z dołączeniem? http://www.dotnetperls.com/join – TigOldBitties
@TigOldBitties Ostatnio edytowałem moje pytanie. Chcę uzyskać pozycję produktu. –
Pytanie nadal obowiązuje bez względu na to, co próbujesz zdobyć. – TigOldBitties