'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,使用 WhereSelect 所选项目列表中的值并使用 Enumerable.Contains

只是一个小建议,如果 r["id"] 的任何值是 null 那么你最终可能会得到一个 NRE,所以使用:

.Contains(Convert.ToString(r["id"]))))
如果值为 null

Convert.ToString 将 return 为空字符串。