Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ查询中的In运算符_C#_Linq_Notin_In Operator - Fatal编程技术网

C# LINQ查询中的In运算符

C# LINQ查询中的In运算符,c#,linq,notin,in-operator,C#,Linq,Notin,In Operator,下拉列表中有几个项目,即 Apply Orange Grapes Factory 我尝试用两个像这样的linq查询来填充下拉列表 if (!Page.IsPostBack) { if (Session["UserName"] == "admin") { //List<spadminlist_Result> admin = tea.spadminlist().ToList

下拉列表中有几个项目,即

Apply
Orange
Grapes
Factory
我尝试用两个像这样的linq查询来填充下拉列表

        if (!Page.IsPostBack)
        {

            if (Session["UserName"] == "admin")
            {
                //List<spadminlist_Result> admin = tea.spadminlist().ToList();

                var admin=from ad in tea.tblReg
                          .Where((x=>x.Region).Contains("Factory"))
                          .GroupBy(x=>x.Region)
                          .Select(x=> new {Region=x.Key})
                          .ToList();



                regiondrop.DataSource = admin;
                regiondrop.DataTextField = "Region";
                regiondrop.DataValueField = "Region";
                regiondrop.DataBind();
                Label4.Visible = false;

            }
            else
            {
                var list = tea.tblReg.AsEnumerable()
                   .Where(x => !x.Region.Any(char.IsDigit) && (x.Region != ""))
                   .GroupBy(x => x.Region)
                   .Select(x => new { Region = x.Key, Value = x.Key })
                   .ToList();

                regiondrop.DataSource = list;
                regiondrop.DataTextField = "Region";
                regiondrop.DataValueField = "Region";
                regiondrop.DataBind();
                Label4.Visible = false;
            }

        }
这显示了一个错误

错误3查询正文必须以select子句或group子句结尾

如果角色不是admin,那么我不想显示工厂值,如果角色是admin,那么我只想在下拉列表中显示“工厂”值
因此,我如何在第二个linq查询中使用not in运算符,以及如何在第一个linq查询中使用contains运算符,但这显示了一个错误,正如我前面提到的那样,

其中的
语法错误,您不需要
GroupBy

var admin = tea.tblReg.Where(x => x.Region == "Factory")
                      .Select(x => x.Region)
                      .Distinct()
                      .ToList();
这将仅从数据库中检索
区域
为“工厂”的记录,并将以与
其他
相同的形式创建该记录


您还可以重构一点代码以减少重复(还可以做更多的工作):


还请注意,我更改了
的用法!Any(char.IsDigit)
All(char.IsDigit)
-一个更清晰的方法是这样做

你能解释一下你想要实现什么吗?想在管理员登录时只在下拉列表中显示出厂值,否则所有值都将显示在下拉列表中。请编辑问题名称以更好地适应问题+如果你可以从下面的问题列表中删除注释-它们不会为将来的用户添加有用信息这将在第一次linq查询时显示错误。。错误4“chart_project.tblReg”不包含“Key”的定义,并且找不到接受“chart_project.tblReg”类型的第一个参数的扩展方法“Key”(是否缺少using指令或程序集引用?)如果我不想要第二个linq中的工厂值怎么办?查询我是如何点那个Alsof还是不想要工厂我这样做的。其中(x=>!x.Region.Any(char.IsDigit)&&&(x.Region!=“”)&&&&(x=>!exceptionList.Contains(“工厂”)),但这显示了一个错误。。错误5无法在此范围内声明名为“x”的局部变量,因为它将赋予“x”不同的含义,而“x”已在“父级或当前”范围内用于表示其他内容@Gilad Green,但区域列中也有几个数字,我不希望这就是为什么我要这样做!Any(char.IsDigit)@user6628729-见最新编辑。添加了该值不是“工厂”,并从此查询中删除了GroupBy。我强烈建议您研究lambda表达式和linq
var admin = tea.tblReg.Where(x => x.Region == "Factory")
                      .Select(x => x.Region)
                      .Distinct()
                      .ToList();
if (!Page.IsPostBack)
{
    if (Session["UserName"] == "admin")
    {
        regiondrop.DataSource = tea.tblReg.Where(x => x.Region == "Factory")
                                   .Select(x => x.Region)
                                   .Distinct()
                                   .ToList();
    }
    else
    {
        regiondrop.DataSource = tea.tblReg.Where(x => x.Region.All(char.IsLetter) && 
                                                      x.Region != "" &&
                                                      x.Region != "Factory")
                                          .Select(x => x.Region)
                                          .Distinct()
                                          .ToList();
    }

    regiondrop.DataTextField = "Region";
    regiondrop.DataValueField = "Region";
    regiondrop.DataBind();
    Label4.Visible = false;
}