Как мне присоединиться к константе в LINQ? - PullRequest
4 голосов
/ 07 декабря 2009

Я пытаюсь сделать левое соединение с такой константой:

SELECT 
    [t0].[DeviceId], 
    [t0].[DeviceTypeId], 
    [t0].[UnitId], 
    [t0].[UnitNum], 
    [t0].[ManPhone], 
    [t0].[Status], 
    [t2].[MaintDate] AS [ServiceExpiration]
FROM [dbo].[Devices] AS [t0]
    INNER JOIN [dbo].[CustomerDevices] AS [t1] 
        ON ([t0].[DeviceId]) = [t1].[DeviceId]
    LEFT JOIN [dbo].[Maintenance] AS [t2] 
        ON ([t0].[DeviceId]) = [t2].[DeviceId]
            AND 8 = [t2].ActionId

Я получаю CS1941 , когда пытаюсь в LINQ, вот так:

var devices = from d in db.Devices
    join cd in db.CustomerDevices
        on d.DeviceId equals cd.DeviceId
    join serviceExpiration in db.Maintenances
        on 
           new { d.DeviceId, ActionId = 8 } // CS1941
               equals 
           new { serviceExpiration.DeviceId, ActionId = serviceExpiration.ActionId } into j1
    from deviceServiceExpiration in j1.DefaultIfEmpty()

Ответы [ 4 ]

6 голосов
/ 07 декабря 2009

Сначала попробуйте из Maintenances на ActionId == 8, затем используйте это, чтобы присоединиться к.

var expirations = from serviceExpiration in db.Maintenances
                  where serviceExpiration.ActionId == 8
                  select serviceExpiration;

var devices = from d in db.Devices
    join cd in db.CustomerDevices
        on d.DeviceId equals cd.DeviceId
    join e in expirations
        on d.DeviceId = e.DeviceId into j1
    from deviceServiceExpiration in j1.DefaultIfEmpty()
    select deviceServiceExpiration;
0 голосов
/ 03 сентября 2013

Опоздал на вечеринку, но я столкнулся с той же проблемой и хотел помочь кому-нибудь в будущем. Исправление состоит в том, чтобы присоединиться к подзапросу.

var devices = from d in db.Devices
    join cd in db.CustomerDevices
        on d.DeviceId equals cd.DeviceId
    join serviceExpiration in (from x in db.Maintenances where x.ActionId == 8 select x)
        on d.DeviceId equals serviceExpiration.DeviceId into j1
    from deviceServiceExpiration in j1.DefaultIfEmpty()

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 10 июля 2012

Попробуйте это

var devices = from d in db.Devices
    join cd in db.CustomerDevices
        on d.DeviceId equals cd.DeviceId
    join serviceExpiration in db.Maintenances
        on d.DeviceId equals serviceExpiration.DeviceId into j1
    from deviceServiceExpiration in j1.Where(c=>c.ActionId ==8).DefaultIfEmpty()
0 голосов
/ 07 декабря 2009

или в запросе:

var devices = from d in db.Devices
    join cd in db.CustomerDevices
        on d.DeviceId equals cd.DeviceId
    join serviceExpiration in db.Maintenances
        on 
           d.DeviceId
               equals 
           serviceExpiration.DeviceId into j1
    from deviceServiceExpiration in j1.DefaultIfEmpty()
        where serviceExpiration.ActionId  == 8
    select deviceServiceExpiration;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...