LINQ 查询中的运算符
In operator in LINQ query
下拉列表中有几个项目,即
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;
}
}
现在当我尝试这条线时
//列表 admin = tea.spadminlist().ToList();
然后数据源显示为空
其中 sp return 值即。工厂
所以我决定使用 qrite linq 查询,所以在写完 linq 查询之后
var admin=from ad in tea.tblReg
.Where((x=>x.Region).Contains("Factory"))
.GroupBy(x=>x.Region)
.Select(x=> new {Region=x.Key})
.ToList();
这显示错误
Error 3 A query body must end with a select clause or a group clause
我还想如果角色不是管理员,那么我不想显示出厂值,如果角色是管理员,那么我只想在下拉列表中显示值 "Factory"
所以我如何在第二个 linq 查询中使用 not in operator 以及在第一个 LINQ 中使用 in operator contains operator 但这显示了我上面提到的错误
你的 Where
语法错误,你不需要 GroupBy
。
var admin = tea.tblReg.Where(x => x.Region == "Factory")
.Select(x => x.Region)
.Distinct()
.ToList();
这将从数据库中仅检索 Region
为 "Factory" 的记录,并将以与 else
中相同的形式创建它
您还可以重构您的代码以减少重复(并且仍然可以做更多):
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;
}
另请注意,我将 !Any(char.IsDigit)
的用法更改为 All(char.IsLetter)
- 一种更清晰的方式
下拉列表中有几个项目,即
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;
}
}
现在当我尝试这条线时 //列表 admin = tea.spadminlist().ToList(); 然后数据源显示为空 其中 sp return 值即。工厂
所以我决定使用 qrite linq 查询,所以在写完 linq 查询之后
var admin=from ad in tea.tblReg
.Where((x=>x.Region).Contains("Factory"))
.GroupBy(x=>x.Region)
.Select(x=> new {Region=x.Key})
.ToList();
这显示错误
Error 3 A query body must end with a select clause or a group clause
我还想如果角色不是管理员,那么我不想显示出厂值,如果角色是管理员,那么我只想在下拉列表中显示值 "Factory" 所以我如何在第二个 linq 查询中使用 not in operator 以及在第一个 LINQ 中使用 in operator contains operator 但这显示了我上面提到的错误
你的 Where
语法错误,你不需要 GroupBy
。
var admin = tea.tblReg.Where(x => x.Region == "Factory")
.Select(x => x.Region)
.Distinct()
.ToList();
这将从数据库中仅检索 Region
为 "Factory" 的记录,并将以与 else
您还可以重构您的代码以减少重复(并且仍然可以做更多):
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;
}
另请注意,我将 !Any(char.IsDigit)
的用法更改为 All(char.IsLetter)
- 一种更清晰的方式