Linq to SQL, вложенный в запрос FROM - PullRequest
6 голосов
/ 15 декабря 2008

Может кто-нибудь сказать мне, как написать вложенный запрос SQL, например

ВЫБРАТЬ * ОТ X, ГДЕ X.ID В (ВЫБРАТЬ Y.XID ОТ Y ГДЕ .....)

в LINQ?

Ответы [ 3 ]

8 голосов
/ 15 декабря 2008

Чтобы сделать IN в sql, вам нужно использовать функцию Contains в Linq.

Так, например:

var query = from x in GetX()
            where (from y in GetY() select y.xID).Contains(x.xID)
            select x;

Вы также можете определить внутренний запрос linq отдельно, если хотите, который немного более читабелен

8 голосов
/ 15 декабря 2008

Вы можете попробовать:

var yIds = from y in dataContext.Y
           where ...
           select y.XId;

var query = from x in dataContext.X
            where yIds.Contains(x.Id)
            select x;

Хотя я не знаю, сработает ли это - есть ли причина, по которой вы не хотите вместо этого просто объединяться? Например:

var query = from x in dataContext.X
            join y in dataContext.Y.Where(...) on x.Id equals y.Xid
            select x;
6 голосов
/ 14 марта 2011

Я искал NOT IN решение для LINQ to SQL. Благодаря этому вопросу я смог Google правильно и найти этот пост в блоге: Предложение NOT IN в LINQ to SQL

C #

NorthwindDataContext dc = new NorthwindDataContext();
var query =
    from c in dc.Customers
    where !(from o in dc.Orders
            select o.CustomerID)
           .Contains(c.CustomerID)
    select c;

VB.net

Dim db As New NorthwinDataContext()
Dim query = From c In dc.Customers _
            Where Not (From o in dc.Orders _
                       Select o.CustomerID).Contains(c.CustomerID) _
            Select c
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...