1

下拉菜单中有几个项目,即

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

        }

现在当我尝试这一行时 //List admin = tea.spadminlist().ToList(); 然后数据源显示 null 其中作为 sp 返回值,即。工厂

所以我决定 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();

这显示一个错误

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

而且我还想如果角色不是管理员,那么我不想显示工厂值,如果角色是管理员,那么我只想在下拉列表中显示值“工厂”,所以我如何在第二个 linq 查询中使用 not in operator 和 for in operator我在第一个 LINQ 中使用 contains 运算符,但这显示了我上面提到的错误

4

1 回答 1

1

你的语法Where是错误的,你不需要GroupBy.

var admin = tea.tblReg.Where(x => x.Region == "Factory")
                      .Select(x => x.Region)
                      .Distinct()
                      .ToList();

这将只从数据库中检索Region“工厂”所在的记录,并以与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)to的使用All(char.IsLetter)- 一种更清晰的方式

于 2016-08-25T11:25:43.217 回答