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)
知道如何有选择地组合这些吗?
假设查询的类型相同,您可以在条件语句之外定义查询.
首先,一个辅助方法,它创建一个与参数相同类型的空可枚举:
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()
.