Как написать этот T-SQL в LINQ для sQL? - PullRequest
3 голосов
/ 23 декабря 2010
select * from table1 where pkey1 in
(select pkey2 from table2 where column1='abc')

Где pkey1 и pkey2 оба являются столбцами типа int.

Ответы [ 5 ]

4 голосов
/ 23 декабря 2010

что-то вроде:

from t1 in table1
let x = from t2 in table2 where t2.column1.Equals("abc") select t2
where t1.pkey1.Equals(x.pkey2)
select t1;

и вы в конечном итоге знаете, что let помогает вам делать:)

2 голосов
/ 23 декабря 2010
from t in table1
join u in table2 on t.pkey1 equals u.pkey2
where u.column1 == "abc"
select t;
2 голосов
/ 23 декабря 2010
var query = from a in db.table1
            join b in db.table2 on a.pkey1 equals b.pkey2
            where b.column1 == "abc"
            select a;
2 голосов
/ 23 декабря 2010

Не ответ LINQ, но совершенно правильный ответ LINQ-to-SQL:

var results = ctx.ExecuteQuery<Table1>(@"
    select * from table1 where pkey1 in
    (select pkey2 from table2 where column1='abc')").ToList();

У вас нет для передачи управления каждым запросом LINQ;действительно, во многих случаях хорошо написанный пользовательский запрос TSQL может быть гораздо более эффективным, чем тот, который генерируется из LINQ-to-SQL.Что не является критикой LINQ-to-SQL (он отлично справляется с большинством простых запросов и т. Д.).

0 голосов
/ 23 декабря 2010

Вот еще один возможный запрос:

var q = from t2 in table2.Where(x => x.column1 == "abc")
        from t in table1.Where(x => x.pkey1 == t2.pkey2)
        select t;

Вам может потребоваться вызвать Distinct() для получения результатов в зависимости от того, как вы хотите его использовать.Сгенерированный SQL эквивалентен:

SELECT [t1].*
FROM table2 AS [t2], table1 AS [t1]
WHERE ([t2].[column1] = 'abc') AND ([t1].[pkey1] = [t2].[pkey2])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...