计入Linq to SQL的select查询

时间:2014-03-08 03:40:44

标签: c# sql linq

我正在尝试将以下SQL查询转换为Linq。

select eg.userid, eg.groupid, count(r.RID) as RecipientCount
from eg
join g on eg.groupid = g.groupid
join r on g.RID = r.RID
where eg.UserId = '7F813844-3B93-418E-8141-654082C4E37D'
  and eg.IsDeleted = 0
  and r.Isdeleted = 0
group by eg.groupid

以上查询在SQL中正常运行。

我的Linq代码是:

var v = from eml in dc.egs
        join recpingroup in dc.g on eml.GroupID equals recpingroup.GroupID
        where eml.aspnet_User.LoweredUserName.Equals(strUserName.ToLower()) 
          && !eml.IsDeleted 
          && !recpingroup.r.IsDeleted
        select new Info()
        {
            CreateDt = eml.CreateDt.ToShortDateString(),
            UserId = eml.UserId.ToString(),
            LastUpdateDt = eml.LastUpdateDt.ToShortDateString(),
            Username = eml.aspnet_User.UserName,
            GroupDescription = eml.GroupDescription,
            GroupID = eml.GroupID.ToString().ToUpper(),
            GroupName = eml.GroupName,
            Count = dc.g.Count(r1 => r1.GroupID.Equals(eml.GroupID) && !r1.r.IsDeleted)
        };

其中dc是我的DataContext。

但我在最后一个属性中遇到问题,即Count出错了。我希望recpingroup.r中的收件人数为RecipientCount。

另请注意,表在SQL内部通过PK和FK引用链接。

1 个答案:

答案 0 :(得分:0)

尝试以下

Count = (from x in dc.g where(r1 => r1.GroupID.Equals(eml.GroupID) && !r1.r.IsDeleted) select x.g).count()