gpt4 book ai didi

c# - 如果条件在 linq

转载 作者:太空宇宙 更新时间:2023-11-03 18:28:41 24 4
gpt4 key购买 nike

我有一个无法完全工作的 linq 查询。查询从 sql server View 中选择,用户能够从四个单选按钮(使用单选列表相互排斥)之一选择过滤器(在屏幕上),这些单选按钮是事件的、新的、过时的、任意的。因此,如果我选择 Active、New、Obsolete 中的任何一个,它就可以工作,因为这个值用于查询(RBstatus.SelectedValue),但我无法让 linq 说如果选择了“Any”,则错过了过滤器,只输出所有内容。完整的查询是

    var query = (from b in context.mpcViewFormulas.Where(X => 
X.FormulaCode.Contains(formualcode)
&& X.BaseCode.Contains(txtBase.Text)
&& X.Status.Contains(RBstatus.SelectedValue))

我想做的是,如果选择了“任何”单选按钮,则错过查询中的最后一个 && (&& X.Status.Contains(RBstatus.SelectedValue) 或者这是错误的方法吗?

我试过的是

   var query = (from b in context.mpcViewFormulas.Where(X => 
X.FormulaCode.Contains(formualcode)
&& X.BaseCode.Contains(txtBase.Text)
if(RBstatus.SelectedValue !="Any")
{
&& X.Status.Contains(RBstatus.SelectedValue)
})

这抛出错误查询主体必须以选择子句或组子句和无效表达式 trem && 结尾

最佳答案

您只需将其添加为现有条件的一部分。您不能在中间添加 if 语句。换句话说,类似于:

X.FormulaCode.Contains(formualcode) && 
X.BaseCode.Contains(txtBase.Text) &&
(RBstatus.SelectedValue == "Any" || X.Status.Contains(RBstatus.SelectedValue))

或者,由于这些都是逻辑与,您可以简单地链接 Where 子句,即:

var query = (from b in context.mpcViewFormulas.Where(X => X.FormulaCode.Contains(formualcode)
&& X.BaseCode.Contains(txtBase.Text));
if (RBstatus.SelectedValue != "Any")
{
query = query.Where(X => X.Status.Contains(RBstatus.SelectedValue));
}

只要您在再次调用 Where 之前不通过迭代查询或将其转换为列表来评估查询,您仍然只会发出一个查询。

更新

如果“Any”实际上不是一个值,那么您基本上只需要排除或包含每个可能的选定值。例如,在上面的第一个方法中,条件需要从 RBstatus.SelectedValue == "Any" 更改为:

(RBstatus.SelectedValue != "Active" && RBstatus.SelectedValue != "New" && RBstatus.SelectedValue != "Obsolete")

您还可以通过使用字符串数组来减少冗长:

!(new string[] { "Active", "New", "Obsolete" }).Contains(RBstatus.SelectedValue)

不过,这是否真的不那么可读是值得商榷的。

在第二种方法中,由于条件最初是 RBstatus.SelectedValue != "Any",因此您需要执行与我刚才概述的相反的操作。换句话说:

(RBstatus.SelectedValue == "Active" || RBstatus.SelectedValue == "New" || RBstatus.SelectedValue == "Obsolete")

或者

(new string[] { "Active", "New", "Obsolete" }).Contains(RBstatus.SelectedValue)

(注意 ! 已被删除)

关于c# - 如果条件在 linq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27823626/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com