在外表上需要LINQ to SQL WHERE-clause的帮助

时间:2010-08-23 14:53:00

标签: c# .net linq linq-to-sql

假设我有这两个表:

ParentDataItem
    ParentDataItemID
    ...some other fields...

ChildDataItem
    ChildDataItemID
    ParentDataItemID (foreign key)
    Name
    Value

现在我想选择任何具有指定名称和值的ChildDataItem的ParentDataItem。

我知道我的第一种方法已经过时了,这就像是:

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

我更喜欢lambda语法,但要么会这样做。

2 个答案:

答案 0 :(得分:3)

使用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查询。

答案 1 :(得分:3)

如果他们之间已经存在关系(例如,因为你在设计师中设置了一个),你应该能够做到:

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

将获得任何具有名称与“value”匹配的子项的父数据项。

如果没有,你必须手动连接这两个表(在lambda语法中看起来有点可怕):

var foo = db.ParentDataItems.Join(db.ChildDataItems.Where(c => c.Name == "value"),
                                  p => p.ChildDataItemId,
                                  c => c.ParentDataItemId,
                                  (parent, child) => parent);