首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架-如何在缩写的EF linq中实现此SQL

实体框架-如何在缩写的EF linq中实现此SQL
EN

Stack Overflow用户
提问于 2010-10-08 09:57:06
回答 2查看 2.5K关注 0票数 3

有没有人可以帮助解决C#代码的问题,以便以简化形式将此SQL实现为实体框架Linq?(例如,你在哪里有".“符号,如xxx.where(...等)

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-08 12:36:53

基于方法的查询:

要在lambda中实现这一点,我们需要利用

代码语言:javascript
复制
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) });

查询表达式:

并且在查询表达式语法中使用完全相同的查询:

代码语言:javascript
复制
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) };

检查生成的SQL:

要验证这些查询是否在运行时为您提供了所需的Sql命令,您可以执行以下操作:

代码语言:javascript
复制
string sqlCommand = ((ObjectQuery)query).ToTraceString();

更多示例:

有关GroupJoin上的一些很好的示例,请查看以下内容:

票数 5
EN

Stack Overflow用户

发布于 2010-10-08 11:33:04

试试这个(我没有你的代码,所以我没有得到编译器的帮助):

代码语言:javascript
复制
from u in context.Usages
join pn in context.ProcessNames on pn.Id equals u.ProcessNameId
where u.Datetime >= new DateTime(2010, 1, 8) && u.Datetime <= new DateTime(2010, 10, 11)
group pn by pn.Name into g
select new { Name = pn.Name , sum = g.Sum(u => u.Amount) };

这是它的查询表达式版本。要获得基于lambda的语法(我相信您是在问这个问题),将查询放入LinqPad并运行它。然后单击LinqPad中的lambda选项卡,它将向您显示上面查询的语法,就像您用lambda表达式编写的一样(即,您在其中有".“符号)而不是查询表达式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3887188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档