我是linq的新手,我以前用T-SQL开发。 我在T-SQL中有一个'简单'的查询,如下所示:
select article.Id, article.code,article.designation1,sum(inventaire.quantite),
sum(inventaire.quantite) * article.PrixStockArticle,
sum(inventaire.quantite) * article.PrixVenteArticle
from inventaire
inner join article on article.Id = inventaire.articleId
left outer join articleFamille on articleFamille.Id = article.cleClientArticleFamille
left outer join articleFamille2 on articleFamille2.Id = article.cleClientArticleFamille2
group by article.Id,article.code, article.designation1,article.PrixVenteArticle,article.PrixStockArticle
我想用linq和实体框架进行此查询。 制作多个左外连接,分组依和和的简单方法是:
var result = (from f in _context.Inventaire.Include(i => i.oArticle)
join oArticle in _context.Article on f.articleId equals oArticle.Id
join oArticleFamille in _context.ArticleFamille on oArticle.cleClientArticleFamille equals oArticleFamille.Id
into InventaireList
from subpet in InventaireList.DefaultIfEmpty()
join oArticleFamille2 in _context.ArticleFamille2 on oArticle.cleClientArticleFamille2 equals oArticleFamille2.Id
into InventaireList2
from subpet2 in InventaireList2.DefaultIfEmpty()
where (f.clientId == oUser.clientId)
let essai = new
{
oArticle = f.oArticle
,
codeFamille = subpet == null ? "" : subpet.code
,
codeFamille2 = subpet2 == null ? "" : subpet2.code
}
orderby essai.oArticle.code
group f by essai into fGroup
select new InventaireViewModel
{
oArticle = fGroup.Key.oArticle
,
quantite = fGroup.Sum(f => f.quantite)
,
valStock = fGroup.Sum(f => f.quantite) * fGroup.Key.oArticle.PrixStockArticle
,
valVente = fGroup.Sum(f => f.quantite) * fGroup.Key.oArticle.PrixVenteArticle
}).ToList();
有没有更简单的方法来进行这个linq查询? 两个解决方案,我对linq或linq太糟糕了,对于内连接和非常简单的查询都有好处,但不适用于真正的应用程序(如果我要在T-SQL中生成31行代码而不是4行,为什么MS建议使用linq ????? 为什么MS没有实现左外连接?他们从不使用左外?
感谢您的回复! 好的开发!