Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在LINQtoSQL中获取此信息?_Sql_Asp.net Mvc_Linq To Sql - Fatal编程技术网

如何在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)

太好了,这很有帮助!我从完全错误的角度看它。我如何删除所有既没有查看也没有向用户发送消息的用户?太好了,这很有帮助!我从完全错误的角度看它。我如何删除所有既没有查看也没有向用户发送消息的用户?