Как мне получить это в Linq to Sql? - PullRequest
1 голос
/ 02 апреля 2011

Чтобы дать вам немного контекста, мои таблицы базы данных выглядят так:

Пользователь
- ИД пользователя
- Имя

Сообщение
- MessageID
- SenderUserID
- RecipientUserID

Просмотр
- ViewID
- VieweeUserID
- ViewerUserID

Используя один оператор LINQ to SQL, я хочу получить всех пользователей, у которых есть «Просмотрено» или «Сообщил» пользователю, и поместить их в объект, подобный этому:

Интерактор
- Имя (зритель или мессенджер)
- NumberOfMessagesSent
- NumberOfTimesViewed

Я пытался целую вечность, чтобы получить то, что я хочу, но каждый раз, когда я получаю сумасшедшие данные, я явно что-то делаю не так ... пожалуйста, помогите!

1 Ответ

1 голос
/ 02 апреля 2011

Имя отношений в вашей модели может различаться (именно так их назвал 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...