【问题标题】:Linq to Sql select from multiple tableLinq to Sql 从多个表中选择
【发布时间】:2010-05-24 14:33:03
【问题描述】:

我有一个关于使用 Linq 从 C# 中的多个表中进行选择的问题。

表结构是这样的:

表 A
桌辅助 第 1 列 第 2 列

表 B
TableBID TableAID Column3 Column4

所以在代码中我有:

List<string> myList = new List{"Test1","Test2"};
var myView = MYDC.TableA.AsQueryAble();

如果我想使用 Column1 上的 where 从表 A 中选择记录,我会简单地使用:

myView = myView.Where(k=>myList.Contains(k.Column1));

但是,如果我想将 myView 保留为 TableA 的可查询项,并且如果我想在 Column3 上使用 TableB 上的 where,它通过外键链接到 TableA,我该怎么做?

我尝试了以下但没有成功:

myView = myView.Where(k=>myList.Contains(k.TableB.Select(kk=>kk.Column3)));

有什么建议吗?

提前致谢

【问题讨论】:

  • “没有成功”是什么意思?当你尝试它时发生了什么?
  • 它说:Delegate 'System.Func' 不接受 1 个参数
  • 我要指出的是,当您在可查询语句中看到 Func(与 Expression&lt;Func&lt;&gt;&gt; 相比)时,通常意味着它正在运行谓词 in memory 而不是而不是转换为数据库调用,因此它通常会否定可查询的好处(因为您要返回整个记录集以执行谓词)。

标签: c# linq-to-sql predicate


【解决方案1】:

有几种方法可以做到这一点。以下是其中两个:

var q = (
    from b in MYDB.TableB
    where myList.Contains(b.Column3)
    select b.TableA).Distinct();

var q =
    from a in myView
    let bs = a.TableB.Where(b => myList.Contains(b.Column3))
    where bs.Any()
    select a;

我希望这会有所帮助。

【讨论】:

  • 谢谢,但我知道如何使用普通的 linq 查询来做到这一点。但是使用谓词怎么样?
猜你喜欢
  • 2010-10-03
  • 2011-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多