如何在LINQtoSQL中获取此信息?
为了让您了解一下上下文,我的数据库表如下所示: 用户如何在LINQtoSQL中获取此信息?,sql,asp.net-mvc,linq-to-sql,Sql,Asp.net Mvc,Linq To Sql,为了让您了解一下上下文,我的数据库表如下所示: 用户 -用户ID -名字 消息 -MessageID -SenderUserID -接收方用户ID 查看 -ViewID -VieweeUserID -ViewerUserID 使用一条LINQ to SQL语句,我希望获得所有“查看”或“发送消息”给用户的用户,并将其放入如下对象中: 互动者 -姓名(观众或留言者) -NumberOfMessagesSent -浏览次数 我已经尝试了很多年来得到我想要的,但每次我似乎得到疯狂的数据,所以我显然是做
-用户ID
-名字 消息
-MessageID
-SenderUserID
-接收方用户ID 查看
-ViewID
-VieweeUserID
-ViewerUserID 使用一条LINQ to SQL语句,我希望获得所有“查看”或“发送消息”给用户的用户,并将其放入如下对象中: 互动者
-姓名(观众或留言者)
-NumberOfMessagesSent
-浏览次数
我已经尝试了很多年来得到我想要的,但每次我似乎得到疯狂的数据,所以我显然是做错了什么。。。请帮忙 模型上关系的名称可能会有所不同(这是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)
模型上关系的名称可能会有所不同(这是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)
太好了,这很有帮助!我从完全错误的角度看它。我如何删除所有既没有查看也没有向用户发送消息的用户?太好了,这很有帮助!我从完全错误的角度看它。我如何删除所有既没有查看也没有向用户发送消息的用户?