2016-08-25 139 views
1

有下拉即在LINQ查询运算符

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(); 然后数据源显示为空 其中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查询体必须与选择子句或一组子句结束

而且我也想如果角色不是管理员那么我不想显示出厂值,如果角色是管理员,那么只有我想显示值“Facto RY”,在下拉菜单中 我怎么那么在第二LINQ查询操作,并为运营商i的使用使用不包含运营商中第一个LINQ但这显示错误如上面我提到

+0

你能解释你想达到什么吗? –

+0

想要实现当管理员登录时,然后只显示出厂值在下拉列表中,否则所有值将显示在下拉列表中。 – user6628729

+0

请编辑问题的名称以更好地适合问题+如果您可以删除问题的评论 - 他们不要为将来的用户添加有用的信息 –

回答

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

还请注意,我改变了使用10到All(char.IsLetter) - 这样做的更明确的方法

+0

这会在第一个linq查询中显示错误..错误'chart_project.tblReg'不包含'Key'的定义,也没有接受第一个参数类型的扩展方法'Key' 'chart_project.tblReg'可以找到(你是否缺少一个使用指令或程序集引用?) – user6628729

+0

和如果我不想要在第二个linq查询中的出厂值如何我点也 – user6628729

+0

不想工厂我这样做... .Where(x =>!x.Region.Any(char.IsDigit)&&(x.Region!=“”)&&(x =>!exceptionList.Contains(“Factory”))) 但这显示错误..错误一个名为'x'的局部变量不能在这个范围内声明,因为它会给'x'赋予不同的含义,'x'已经在'父或当前'范围内用来表示其他的东西 – user6628729