/ / Multi table join za pomocą Entity framework 4.1, czy powinienem używać lambda lub LINQ? - sql, asp.net-mvc, linq, entity-framework, lambda

Łączenie wielu tabel przy użyciu architektury Entity 4.1, powinienem użyć lambda lub LINQ? - sql, asp.net-mvc, linq, entity-framework, lambda

Jestem nowy w Entity Framework i próbuję przekonwertować połączenie wielu tabel, aby użyć struktury Entity. Oryginalny SQL wyglądał mniej więcej tak

JOIN tab_NewsCommunities S1 ON S1.News_ID = tab_News.NewsID
inner join tab_communities com on S1.Community_ID = com.Community_ID and com.RecordStatus_ID = 2
JOIN tab_Communities c ON S1.Community_ID = c.Community_ID
JOIN tab_Favorites uf ON S1.Community_ID = uf2.Community_ID
WHERE uf.[User_ID] = @UserId

Nowy model Entity wygląda mniej więcej tak,Uprościłem to trochę.Czy ktokolwiek pomoże mi przekonwertować sql do LINQ lub lambda? "Widziałem wiele próbek on-line, ale wszystkie one są złączami pojedynczego stołu. Dzięki

model jednostki

Odpowiedzi:

4 dla odpowiedzi № 1

Sugeruję, żebyś to przeczytał post na blogu autor: CRAIG STUNTZ. Chodzi o to, że tak długo, jak masz poprawną relację w swoim modelu, możesz po prostu użyć linku nawigacyjnego, aby wybrać wszystkie swoje właściwości bez polegania na operatorze JOIN. Szczerze mówiąc, to jest piękno LINQ, dlaczego warto dołączyć do siebie, jeśli twój model może to zrobić.


1 dla odpowiedzi nr 2

Tak długo, jak zdefiniowałeś relatywne czarno-białe tabele w projektowaniu EF, nie musisz ponownie robić sprzężeń.

var result =  context.News.Include("NewsCommunity.Communities")
.Include("NewsCommunity.Favorites")
.Where( n => n.NewsCommunity.Favorites.Any(f => f.UserId == userId));

1 dla odpowiedzi nr 3

Możesz użyć wyrażenia lamda wewnątrz metody Include z najnowszą wersją Entity Framework. Następnie możesz użyć drugiego wyboru, aby uzyskać dodatkową warstwę w głąb związku.

var result = context.News.Include(x=>x.NewsCommunity.select(z=>z.Communities)).Where(...)