2011-05-19 69 views
0
protected void lstGroup_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    string selectedValues=string.Empty; 
    foreach (ListItem li in lstGroup.Items) 
    { 
     if (li.Selected == true) 
     { 
      selectedValues += li.Value+","; 
     } 

    } 
    selectedValues = selectedValues.Trim(','); 
    var accessright = (from ug in Db.VCT_USER_GROUPs 
         where ug.GROUP_ID in(selectedvalues) 
         select new 
            { 
             ug.GROUP_ID, 
             ug.GROUP_NAME 
            }).ToList(); 
    if (true) 
    { 
     dlGroup.DataSource = accessright; 
     dlGroup.DataBind(); 
    } 
} 

以上是我的代碼。在selectedValues變量中,我有像1,2,3這樣的值,我想在linq中使用子句,就像ug.GROUP_ID在(selectedvalues)中一樣。但是這是給我錯誤。如何做到這一點in linq中的條款

回答

0

你要顛倒順序,並使用.Contains()

var accessright = (from ug in Db.VCT_USER_GROUPs 
        where selectedvalues.Contains(ug.GROUP_ID) 
        select new 
           { 
            ug.GROUP_ID, 
            ug.GROUP_NAME 
           }).ToList(); 

注意這個使用selectedvalues爲enumberable,而不是一個連接字符串:

var selectedvalues = lstGroups.Items.Where(i => i.Selected).Select(i => i.Value); 
+0

var accessright =(來自Db.VCT_USER_GROUPs中的ug 其中selectedvalues.Contains(Convert.toString(ug.GROUP_ID)) sel ect new { ug.GROUP_ID, ug.GROUP_NAME })。ToList();但它給我錯誤「只有可以在客戶端上評估的參數支持String.Contains方法」 – amit 2011-05-19 07:20:47

+0

@amit - 我已更新我的答案以修復您的'selectedvalues' – cjk 2011-05-19 10:35:31

0
(from ug in Db.VCT_USER_GROUPs 
    where selectedvalues.Any(selectedeVal => selectedeVal == ug.GROUP_ID) 
    select new 
    { 
    ug.GROUP_ID, 
    ug.GROUP_NAME 
    }).ToList(); 
+0

selectedValues是一個字符串變量。不會顯示我以後任何人(操作員) – amit 2011-05-19 07:19:07