为了给你一些上下文,我的数据库表看起来像这样:
用户
- 用户ID
- 姓名
消息
- 消息ID
- SenderUserID
- RecipientUserID
查看
- ViewID
- VieweeUserID
- ViewerUserID
使用单个LINQ to SQL语句,我希望让所有用户“浏览”或“Messaging”成为用户并将其放入如下对象:
交互器
- 姓名(观众或消息者)
- NumberOfMessagesSent
- NumberOfTimesViewed
我已经尝试了很长时间才能得到我想要的东西,但每次我似乎都得到了疯狂的数据,所以我显然做错了什么......请帮忙!
答案 0 :(得分:1)
模型上关系的名称可能会有所不同(这就是LinqPad命名的方式),但这是我认为你要完成的事情:
Users.Select(u => new Interactor {
Name = u.Name,
NumberOfMessagesSent = u.SenderIdMessages.Count,
NumberOfTimesViewed = u.ViewerIdViews.Count
})
.Where(i => i.NumberOfMessagesSent > 0 || i.NumberOfTimesViewed > 0);
生成的SQL:
SELECT [t3].[Name], [t3].[value] AS [NumberOfMessagesSent], [t3].[value2] AS [NumberOfTimesViewed]
FROM (
SELECT [t0].[Name], (
SELECT COUNT(*)
FROM [Message] AS [t1]
WHERE [t1].[SenderId] = [t0].[UserId]
) AS [value], (
SELECT COUNT(*)
FROM [View] AS [t2]
WHERE [t2].[ViewerId] = [t0].[UserId]
) AS [value2]
FROM [User] AS [t0]
) AS [t3]
WHERE ([t3].[value] > @p0) OR ([t3].[value2] > @p1)