Нужна помощь с LINQ to SQL WHERE-предложением на чужой таблице - PullRequest
3 голосов
/ 23 августа 2010

Допустим, у меня есть эти две таблицы:

ParentDataItem
    ParentDataItemID
    ...some other fields...

ChildDataItem
    ChildDataItemID
    ParentDataItemID (foreign key)
    Name
    Value

Теперь я хочу выбрать любые ParentDataItems, у которых есть ChildDataItem с указанным именем и значением.

Я знаю, что я был далекос моим первым подходом, который был примерно таким:

// db is the data context object
db.ParentDataItems.Where(p => p.ChildDataItems.Where(c => c.Name == "XXX" && c.Value == "XXX"));

Я предпочитаю лямбда-синтаксис, но любой из них подойдет.

Ответы [ 2 ]

3 голосов
/ 23 августа 2010

Если между ними уже есть связь (потому что вы настроили ее в конструкторе, например), вы просто должны сделать:

var foo = db.ParentDataItems.Where(p => p.ChildDataItems.Any(c => c.Name == "value");

, которая получит любые элементы родительских данных, у которых есть дочерние элементыс именем, совпадающим с «значением».

Если нет, вам придется вручную объединить две таблицы (что выглядит несколько более ужасно в лямбда-синтаксисе):

var foo = db.ParentDataItems.Join(db.ChildDataItems.Where(c => c.Name == "value"),
                                  p => p.ChildDataItemId,
                                  c => c.ParentDataItemId,
                                  (parent, child) => parent);
3 голосов
/ 23 августа 2010

Использование синтаксиса LINQ:

var foo = from p in ctx.Parent
          join c in ctx.Children on c.ParentDataItemID equals p.ParentDataItemID
          where c.Name = "Foo"
          select p;

Я рекомендую LINQPad для создания и изучения запросов LINQ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...