【问题标题】:Dynamic LINQ to join on dynamic columns on DataTable动态 LINQ 加入 DataTable 上的动态列
【发布时间】:2012-10-02 14:08:55
【问题描述】:

我有一种情况,我目前不确定如何继续。

我有两个从数据库中填充的数据表,我还有一个可用的列名列表,可用于将这两个数据表连接在一起。我希望编写一组 LINQ 查询:

  1. 显示两个数据表中的行(内连接,用于从另一个更新一个)。
  2. 显示一个数据表中不存在于另一个数据表中的行(一个查询,左连接用于插入,另一个右连接用于删除)。

现在我知道如何使用普通的 LINQ 对对象或数据表执行此操作,但是在这种情况下,我需要应用列以动态连接,并且可能不止一个。查看以下部分示例代码:

table1.AsEnumerable()
.Join(table2.AsEnumerable(),
    dr1 => dr1.Field<string>("ID"),
    dr2 => dr2.Field<string>("ID"),
    (dr1, dr2) => new
    {
        FieldID = dr1.Field<string>("ID"),
        CdGroup = dr2.Field<string>("Name")
    })

问题是我不知道字段类型,因此无法应用该语句的 .Field&lt;string&gt; 部分。此外,如果它们是多个连接列,那么我将需要多个连接语句。

我已经阅读了动态 LINQ 并且看起来很有希望,但是我还没有像我试图做的那样找到关于动态 LINQ 连接的任何信息。我知道使用嵌套循环或数据表上的.Select() 方法可能会得到相同的结果,但我正在尝试将 LINQ 应用于我需要的一些更难的查询。

是否有人对我如何实现这一点有任何指示或示例,或者我应该恢复使用非 LINQ 方法吗?

非常感谢。

【问题讨论】:

  • 你能用一些虚拟/示例数据解释一下吗?

标签: c# linq datatable


【解决方案1】:

如果您使用的是实体框架,您可以下载 Microsoft Dynamics CRM,并使用回答此问题的模式Is there way to structure a QueryExpression so that you could dynamically handle a unknown number of conditions

有一个名为 QueryExpression 的构造,您可以从中对动态查询进行建模。请参阅这篇 MSDN 文章http://msdn.microsoft.com/en-us/library/microsoft.xrm.sdk.query.queryexpression.aspx

【讨论】:

    猜你喜欢
    • 2021-01-22
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    相关资源
    最近更新 更多