2016-05-17 193 views
0

我一直在试图将这个SQL语句转换为LINQ,因为我试图将该功能移入程序中。对LINQ到实体的SQL查询 - C#

这里是SQL语句

SELECT cust.sg_group_name      AS customer, 
    (SELECT Sum(du.used_space) 
    FROM sg_groups AS clnt 
      LEFT JOIN client_disk_usage AS du 
        ON clnt.sg_group_id = du.sg_group_id 
        AND clnt.group_role_id = 3 
    WHERE clnt.parent_group_id = cust.sg_group_id 
      AND du.day_of_month = 15 
      AND du.month_of_year = 05 
      AND du.used_space_year = 2016) AS disk_usage 
FROM sg_groups AS cust 
WHERE cust.group_role_id = 2 
ORDER BY cust.sg_group_name 

本质的输出仅仅是一个两列

customer  disk_usage 
Customer1 136401537652 
Customer2 42208008210 

如果可能的话,我只是想将其转换为一个LINQ语句列表。我试图把查询放入LinqPad,但它似乎并不想从SQL转换到Linq(只是出现一个空白的白页)。我自己曾经在查询过程中发现过一个错误,但是我要么得到一些完全不起作用的结果,要么得到不正确的结果数量。

如果有人有任何建议,这将是伟大的!

+1

左加入是指http://stackoverflow.com/questions/700523/linq-to-sql-left-outer-join – Anil

回答

0

对延迟响应抱歉。我已经标记了@Anil答案,因为这是帮助我找到答案的答案。您的解决方案在@Sathish中工作,但可以通过单个命令完成。这是我的最终解决方案。非常感谢您的帮助!

storeGridUsage = (
       from cust in db.sg_groups 
       from client in db.sg_groups 
       join du in db.client_disk_usage on client.SG_GROUP_ID equals du.SG_GROUP_ID 
       where client.GROUP_ROLE_ID == 3 
       where client.PARENT_GROUP_ID == cust.SG_GROUP_ID && du.DAY_OF_MONTH == day && du.MONTH_OF_YEAR == month && du.USED_SPACE_YEAR == year 
       where cust.GROUP_ROLE_ID == 2 
       orderby cust.SG_GROUP_NAME 
       group new {cust, du} by cust.SG_GROUP_NAME 
       into g 
       select new StoreGridUsage 
       { 
        CustomerName = g.Key, 
        DiskUsageInBytes = g.Sum(o => o.du.USED_SPACE) 
       }).ToList(); 
0

disk_usage(子查询)有点复杂的部分。在这里转换。尝试了这一点

var CoreList = (from clnt in EntityName.sg_groups 
        join du in EntityName.client_disk_usage 
        on new { GrpId = clnt.sg_group_id, RoleId = clnt.group_role_id } equals new { GrpId = du.sg_group_id, RoleId = 3 } into LJ 
        from RT in LJ.DefaultIfEmpty() 
        where du.day_of_month == 15 && du.month_of_year == 05 && du.used_space_year == 2016 
        select new {clnt, du, RT} 
        ).ToList(); 

    var CoreListSet = CoreList.Select(i=> new YourEntityClass 
         { 
         //Fetch the ParentGroupId & UsedSpace 
         }).ToList(); 

    var CoreListComplete = (from cl in CoreListSet 
          join cust in EntityName.sg_groups 
          on cust.sg_group_id equals cl.parent_group_id).ToList(); 

现在得到CoreListComplete &的总和刚刚实施的LINQ基本选择查询!

+0

您是否尝试过? @tjackadams –