linq vs t SQL语法

linq vs t SQL语法,sql,linq,syntax,Sql,Linq,Syntax,我是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

我是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不实现左外连接?他们从不使用左外连接

谢谢回复!
很好的开发!

实际上,如果在实体模型(类)中添加适当的参数,LINQ查询将更小,更易于编写-EF中最漂亮的东西之一。那么,我们可以看看你的类吗?你是对的!导航属性使linq非常简单!谢谢!事实上,如果你在实体模型(类)中加入适当的内容,linq查询将更小,更容易编写-EF中最漂亮的东西之一。那么,我们可以看看你的类吗?你是对的!导航属性使linq非常简单!谢谢!