Som nováčikom v rámci Entity Framework a snažím sa previesť spojenie viacerých tabuliek na používanie rámca Entity. Pôvodný SQL vyzeral niečo 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
Nový model entity vyzerá takto:Niektoré som to zjednodušil. Môže mi niekto pomôcť previesť sql na LINQ alebo lambda? Videl som veľa vzoriek on-line, ale všetky sa pripájajú k jednému stolu. Vďaka
odpovede:
4 pre odpoveď č. 1Navrhujem, aby ste si to prečítali príspevok v blogu autor: CRAIG STUNTZ. Ide o to, že pokiaľ máte vo svojom modeli správny vzťah, môžete jednoducho pomocou navigačného odkazu vybrať všetky svoje vlastnosti bez spoliehania sa na operátora JOIN. A úprimne povedané, toto je krása LINQ, prečo sa k sebe pripojíte, ak to váš model dokáže.
1 pre odpoveď č. 2
Pokiaľ ste definovali vzťahové čiernobiele tabuľky v EF návrhárovi, nemusíte znova robiť spojenia. Stačí sa dočkať, až sa načíta pridružená entita.
var result = context.News.Include("NewsCommunity.Communities")
.Include("NewsCommunity.Favorites")
.Where( n => n.NewsCommunity.Favorites.Any(f => f.UserId == userId));
1 pre odpoveď č. 3
V metóde Zahrnúť môžete použiť lama výraz s najnovšou verziou Entity Framework. Potom môžete pomocou druhého výberu dostať ďalšiu vrstvu hlboko do vzťahu.
var result = context.News.Include(x=>x.NewsCommunity.select(z=>z.Communities)).Where(...)