如何将多个linq查询组合到一个结果集中?

esa*_*sac 4 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.
Run Code Online (Sandbox Code Playgroud)

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

Ben*_*n M 8

假设查询的类型相同,您可以在条件语句之外定义查询.

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

static IEnumerable<T> CreateEmptyEnumerable<T>(IEnumerable<T> templateQuery)
{
    return Enumerable.Empty<T>();
}
Run Code Online (Sandbox Code Playgroud)

然后,新代码:

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
Run Code Online (Sandbox Code Playgroud)

这样做很好,因为查询在枚举之前不会被实际执行,就像在调用中一样ToList().