2016-01-11 3 views
-2

У меня есть ниже запрос в SQL Server:Преобразование SQL-запрос к Linq или лямбда

select * from 
A as a where a.UserId in(select b.id from B as b) and a.Company is null 

Может кто-нибудь помочь мне написать в LINQ или лямбда-expression.Any помощь приветствуется.

+0

Пожалуйста, никогда не удаляйте SQL и не запрашивайте конверсию. По крайней мере, покажите модель класса, поэтому видны свойства навигации и множество ассоциаций. Кроме того, скажите, какой тип LINQ вы нацеливаете (на сущности?), * И * показываете свои собственные первые усилия. Они разъясняют нам больше, чем вы думаете. –

ответ

0

Использование присоединиться

var t = (from a in entites.b.ToList() 
     from b in entites.a.where(x=>x.UserId ==a.id && x.Company==null).ToList() 
     select b).ToList(); 
+0

@Timeout это alos join, как это, где (x => x.UserId == a.id) ссылаются на разные соединения в linq –

+0

@Timeout Я думаю, что вы не читаете запрос. таблица a не должна возвращать все данные, это только данные на основе условий возврата –

2

Вы можете использовать Содержит, он не будет генерировать подзапрос IN но СУЩЕСТВУЕТ подзапрос, но это будет очень близко к исходному SQL

var q1 = context.B 
    .Select(item=>item.Id); 

var q2 = context.A 
    .Where(a=>q1.Contains(a.UserId)) 
    .Where(a=>a.Company == null); // Calling where twice for readability, will generate the same SQL as if you had both weres on a single line with AND, no performance overhead for doing so 

Или, если вы «d, а записать его в одном фрагменте (будет генерировать один и тот же SQL)

var q2 = context.A 
    .Where(a=>context.B 
      .Select(item=>item.Id).Contains(a.UserId)) 
    .Where(a=>a.Company == null); 
0
var x= (from a in db.Table1 
     join b in dbTable2 on a.UserId equals b.id 
     where a.Company == null 
     select a).ToList(); 
Смежные вопросы