2010-08-23 34 views
3

WHERE子句比方说,我有这两个表:与需要帮助的LINQ到SQL对外国表

ParentDataItem 
    ParentDataItemID 
    ...some other fields... 

ChildDataItem 
    ChildDataItemID 
    ParentDataItemID (foreign key) 
    Name 
    Value 

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

我知道我的方式把我的第一种方法,这是这样的:

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

我宁愿lambda语法,但无论是会做。

回答

3

如果已经有它们之间的关系(因为你在设计,例如设置一个),你就应该能够做到:

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

这将让有任何与儿童有关的任何父数据项与“值”匹配的名称。

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

var foo = db.ParentDataItems.Join(db.ChildDataItems.Where(c => c.Name == "value"), 
            p => p.ChildDataItemId, 
            c => c.ParentDataItemId, 
            (parent, child) => parent); 
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查询。

+0

感谢您的链接到LINQPad - 其实我也它的一个安装我的机器 - 我想我可以开始使用它了。 – jhorback 2010-08-23 19:41:30