Gre*_*reg 3 .net c# linq-to-entities entity-framework entity-framework-4
任何人都可以帮助解决C#代码以缩写形式将此SQL实现为Entity Framework Linq的问题吗?(例如,你有"."符号,如xxx.where(......等)
SELECT PN.Name, Sum(U.Amount)
FROM Usages as U, ProcessNames as PN
WHERE PN.Id == U.ProcessNameId
AND U.Datetime BETWEEN '2010-01-08' AND '2010-10-11'
Group By PN.Name
Run Code Online (Sandbox Code Playgroud)
基于方法的查询:
要在lambda中实现这一点,我们需要利用Queryable.GroupJoin:
var query = context.ProcessNames
.GroupJoin(context.Usages
.Where(u => u.Datetime >= new DateTime(2010, 1, 8) )
&& u.Datetime <= new DateTime(2010, 10, 11),
pn => pn.Id,
u => u.ProcessNameId,
(pn, usages) => new { Name = pn.Name,
Sum = usages.Sum(u => u.Amount) });
Run Code Online (Sandbox Code Playgroud)
查询表达式:
查询表达式语法中的查询完全相同:
var query =
from pn in context.ProcessNames
join u in context.Usages
.Where(u => u.Datetime >= new DateTime(2010, 1, 8) )
&& u.Datetime <= new DateTime(2010, 10, 11),
on pn.Id
equals u.ProcessNameId
into g
select new { Name = pn.Name,
Sum = g.Sum(u => u.Amount) };
Run Code Online (Sandbox Code Playgroud)
检查生成的SQL:
要验证这些查询在运行时为您提供所需的Sql命令,您可以执行以下操作:
string sqlCommand = ((ObjectQuery)query).ToTraceString();
Run Code Online (Sandbox Code Playgroud)
更多示例:
有关GroupJoin的一些好例子,请查看以下内容:
基于方法的查询语法示例:连接运算符
查询表达式语法示例:连接运算符