'x' 的 c# 列表 linq 表达式等于另一个列表中的任何内容?
c# list linq expression for 'x' equal to anything from another list?
我有一个选定值的列表,我想看看我的数据集是否包含这些选定值中的任何一个,我知道这可以用 linq 来完成,但我不确定如何做?这是我尝试过的(第二行是我卡住的地方)?
List<ListItem> li = cbList.Items.Cast<ListItem>().Where(i => i.Selected).ToList();
List<DataRow> dr = ds.Tables[0].Rows.Cast<DataRow>().Any(r => r["id"].ToString() == **ANY_OF_LI.SELECTEDVALUE**).ToList();
假设 r["id"].ToString() 是您在 li 中寻找的内容,您可以使用 Contains
List<DataRow> dr = ds.Tables[0].Rows.Cast<DataRow>().Any(r => li.Contains(r["id"].ToString()).ToList();
你需要:
List<DataRow> dr = ds.Tables[0].Rows.Cast<DataRow>()
.Where(r => li.Select(listItem => listItem.Value)
.Contains(r["id"].ToString()))
.ToList();
而不是 Any
,使用 Where
和 Select
所选项目列表中的值并使用 Enumerable.Contains
。
只是一个小建议,如果 r["id"]
的任何值是 null
那么你最终可能会得到一个 NRE,所以使用:
.Contains(Convert.ToString(r["id"]))))
如果值为 null
,Convert.ToString
将 return 为空字符串。
我有一个选定值的列表,我想看看我的数据集是否包含这些选定值中的任何一个,我知道这可以用 linq 来完成,但我不确定如何做?这是我尝试过的(第二行是我卡住的地方)?
List<ListItem> li = cbList.Items.Cast<ListItem>().Where(i => i.Selected).ToList();
List<DataRow> dr = ds.Tables[0].Rows.Cast<DataRow>().Any(r => r["id"].ToString() == **ANY_OF_LI.SELECTEDVALUE**).ToList();
假设 r["id"].ToString() 是您在 li 中寻找的内容,您可以使用 Contains
List<DataRow> dr = ds.Tables[0].Rows.Cast<DataRow>().Any(r => li.Contains(r["id"].ToString()).ToList();
你需要:
List<DataRow> dr = ds.Tables[0].Rows.Cast<DataRow>()
.Where(r => li.Select(listItem => listItem.Value)
.Contains(r["id"].ToString()))
.ToList();
而不是 Any
,使用 Where
和 Select
所选项目列表中的值并使用 Enumerable.Contains
。
只是一个小建议,如果 r["id"]
的任何值是 null
那么你最终可能会得到一个 NRE,所以使用:
.Contains(Convert.ToString(r["id"]))))
如果值为 null
,Convert.ToString
将 return 为空字符串。