这是我正在尝试转换为LINQ-Entities查询的T-SQL ....
SELECT [a].[ModLimit], [b].[NumberOfMods]
FROM [dbo].[Site][a]
INNER JOIN
(
SELECT [SiteId], ISNULL(COUNT(*),0) AS [NumberOfMods]
FROM [dbo].[Users][a]
WHERE [a].[IsMod] = 1
GROUP BY [SiteId]
) [b] ON [a].[SiteId] = [b].[SiteId]
WHERE [a].[SiteId] = 1
到目前为止我正在使用的是什么(不编译......)
from u in db.Set<User>()
join s in db.Set<Site>() on u.SiteId equals s.SiteId
let x = t.ModLimit
where s.SiteId == 1
group u by u.SiteId into g
select new { g,x});
想法?
表格的缩减结构:
网站
SiteId int PK
ModLimit int
用户
UserId int PK
SiteId int FK IsMod 位
答案 0 :(得分:1)
这是我迄今为止的最佳尝试(您是否可以提供dbo.site&amp; dbo.users&amp;或者您期望作为输入的一些测试数据的结构?)
List<User> users = new List<User>();
users.Add(new User() { SiteId = 0, IsMod = 1, ModLimit = 3 });
users.Add(new User() { SiteId = 1, IsMod = null, ModLimit = 2 });
users.Add(new User() { SiteId = 1, IsMod = 1, ModLimit = 2 });
users.Add(new User() { SiteId = 1, IsMod = 1, ModLimit = 2 });
var innerSelect = users
.Where(o => o.IsMod != null && o.IsMod > 0)
.GroupBy(o => o.SiteId)
.Select(o => new User
{
SiteId = o.Key,
Counter = o.Count()
})
.ToList();
var result = (from u in users
join s in innerSelect on u.SiteId equals s.SiteId
where u.SiteId == 1
select new
{
u.ModLimit,
NumberOfMods = s.Counter
})
.Distinct()
.ToList();