动态LINQ加入DataTable上的动态列

时间:2012-08-15 09:42:02

标签: c# linq datatable

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

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

  1. 显示两个数据表中的行(内部联接,用于彼此更新)。
  2. 显示一个数据表中另一个不存在的行(一个查询,左连接用于插入,另一个用于删除的右连接)。
  3. 现在我知道如何使用普通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<string>部分。如果它们是多个连接列,那么我将需要多个连接语句。

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

    有没有人有任何关于如何实现这一点的指针或示例,或者我应该恢复使用非LINQ方法?

    非常感谢。

1 个答案:

答案 0 :(得分:0)

如果您使用的是Entity Framework,则可以下载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