我有一个多选复选框。根据检查的是哪个,我想将结果合并到一个查询中。有点像:
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/