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;
}