in linq中的条款
问题描述:
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中的条款
答
你要颠倒顺序,并使用.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);
答
(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
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
@amit - 我已更新我的答案以修复您的'selectedvalues' – cjk 2011-05-19 10:35:31