2016-08-25 164 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