C# ASP.NET C LINQ条件WHERE子句
我试图从众多下拉列表中获取值,并根据所选选项构建where语句。如果未选中它们,则应将其从select语句中排除 这是我本来应该做的,但我想用linq这种方式是做不到的C# ASP.NET C LINQ条件WHERE子句,c#,asp.net,linq,C#,Asp.net,Linq,我试图从众多下拉列表中获取值,并根据所选选项构建where语句。如果未选中它们,则应将其从select语句中排除 这是我本来应该做的,但我想用linq这种方式是做不到的 IEnumerable<IGrouping<string, Forest>> treeQuery = from trees in Forest if (ddlType1.SelectedValue!=null) { string
IEnumerable<IGrouping<string, Forest>> treeQuery =
from trees in Forest
if (ddlType1.SelectedValue!=null)
{
string strWhere += trees.Type1 == ddlType1.SelectedValue
}
else if (ddlType2.SelectedValue!=null)
{
string strWhere += trees.Type2 == ddlType2.SelectedValue
}
where strWhere
orderby trees.Nuts
group trees by trees.TrunkColour;
任何帮助都将不胜感激
这是我在…中添加示例之前的代码
IEnumerable<IGrouping<string, Forest>> treeQuery =
from trees in Forest
where trees.Type1 == "oak"
orderby trees.Nuts
group trees by trees.TrunkColour;
由于这只涉及两个条件,因此可以在单个LINQ查询中执行:
Forest.Where(tree =>
(
(ddlType1.SelectedValue == null || tree.Type1 == ddlType1.SelectedValue) &&
(ddlType2.SelectedValue == null || tree.Type2 == ddlType2.SelectedValue)
))
.OrderBy(tree => tree.Nuts)
.GroupBy(tree => tree.TrunkColour);
尽管随着条件数量的增加,为了提高可读性,将查询拆分为不同的部分是值得的,因为这种格式可能会因为多个变量而很快变得不可读 在这种情况下,可以使用查询的组合性质,但不希望使用查询表达式。因此:
// Or IEnumerable<Forest>, depending on the type involved...
IQueryable<Forest> query = Forest;
if (ddlType1.SelectedValue!=null)
{
query = query.Where(trees => trees.Type1 == ddlType1.SelectedValue);
}
else if (ddlType2.SelectedValue!=null)
{
query = query.Where(trees => trees.Type2 == ddlType2.SelectedValue);
}
var finalQuery = query.OrderBy(trees => tree.Nuts)
.GroupBy(trees => trees.TrunkColour);
在您开始使用结果之前,这实际上不会执行查询,因此您可以在准备开始之前逐点添加筛选、排序等。对于每个下拉列表,您可以在其中添加一个子句:
where (ddlType1.SelectedValue == "" || trees.Type1 == ddlType1.SelectedValue)
&& (ddlType2.SelectedValue == "" || trees.Type2 == ddlType2.SelectedValue)
// && ( type 3... )
您的第二个示例是在我认为您希望测试相等性的地方进行赋值,即,您有=当我认为您的意思是==如果用户同时从ddlType1和ddlType2中选择了一个值,是否应根据您的示例忽略ddlType2?非常感谢所有回复。这就是我最终使用的解决方案。