c# - 如何将多个 linq 查询组合成一个结果集?

标签 c# linq anonymous-types

我有一个多选复选框。根据检查的是哪个,我想将结果合并到一个查询中。有点像:

if (Checkbox1.Checked)
{
    var query1 = from t in table1 ...
}

if (Checkbox2.Checked)
{
    var query2 = from t in table2 ...
}

DataGridView1.DataSource = query1.Union(query2); // obviously doesnt
      // work since query1 and query2 are not defined in this scope.

知道如何有选择地组合这些吗?

最佳答案

假设查询属于同一类型,您可以在条件语句之外定义查询。

首先,创建一个与参数类型相同的空枚举的辅助方法:

static IEnumerable<T> CreateEmptyEnumerable<T>(IEnumerable<T> templateQuery)
{
    return Enumerable.Empty<T>();
}

然后,新代码:

var query1 = from t in table1 ...
var query2 = from t in table2 ...
var finalQuery = CreateEmptyEnumerable(query1);

if (Checkbox1.Checked)
{
    finalQuery = query1;
}

if (Checkbox2.Checked)
{
    finalQuery = finalQuery.Union(query2);
}

DataGridView1.DataSource = finalQuery.ToList(); // to avoid re-enumeration

这执行得很好,因为查询在被枚举之前不会真正执行,就像调用 ToList() 一样。

关于c# - 如何将多个 linq 查询组合成一个结果集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3160839/

相关文章:

c# - WCF:从服务器访问服务实例

scala - 在 Scala 中扩展匿名类型的目的是什么?

linq - 是否可以从 DataContext.ExecuteQuery 返回匿名对象的 IEnumerable?

c# - 获得最大的不重叠对象算法(x,y,宽度,高度)

c# - html5 中的地理定位

c# - 为什么字符串 IndexOf() 不区分大小写?

c# - 如何从 BinaryExpression 获取运算符

delphi - delphi 中的匿名记录构造函数

c# - 如何使用多线程、锁、Socket编程

linq - 使用 Linq to Xml 获取值(value)