2011-05-19 79 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