как преобразовать sql в linq

#linq #linq-to-sql #linq-to-entities

#linq #linq-to-sql #linq-to-entities

Вопрос:

использование ef4

я пытаюсь преобразовать этот sql в linq, но не смог

 select s.IdSimcard ,s.Imei from dbo.SimCard s 
where s.Imei  not in (select distinct d.Imei  from dbo.SimCard d  inner join dbo.Configuracion c
on c.SinCard_IdSincard = d.IdSimcard
where c.Estado = 'Activo' )
  

Пока у меня есть это с помощью linqpad, я больше не могу использовать linquer для кода активации

 (from s in SimCard where  s.Imei.Contains( (from c in Configuracion
                             join d in SimCard on c.SinCard_IdSincard equals d.IdSimcard
                             where c.Estado == "Activo"
                             select new { d.Imei }).Distinct())
                             select new {  s.IdSimcard, s.Imei })
  

Я прочитал, что «Not in» не поддерживается в EF4, что было бы эквивалентно?

я получаю эту ошибку в linqpad

‘строка.Содержит(строку)’ — Аргумент 1: не удается преобразовать de ‘System.Linq.IQueryable’ в ‘string’

Комментарии:

1. попробуйте это: sqltolinq.com извините, я сегодня устал 🙂

2. не могу больше использовать мою пробную версию, срок действия которой истек: (

3. из s в SimCard, где! (из c в конфигурации, где c.Estado == «activo» выберите c.sincard_idsincard_idsincard). Содержит (s.IdSimcard) выберите новый {s.IdSimcard, s.Imei} ок, похоже, этого хватит 🙂

4. вы можете опубликовать свое собственное решение в качестве ответа и принять его, чтобы повысить свой рейтинг репутации. Однако подумайте, является ли решение RedHat более простым для linq. Удачи.

Ответ №1:

Если я понимаю ваш вопрос, вы можете использовать Except(...) метод расширения (в системе.Пространство имен Linq) вместо Not Contains(...) .