C# DataTable是与单个值匹配的可计算数据表

C# DataTable是与单个值匹配的可计算数据表,c#,vb.net,linq,asenumerable,C#,Vb.net,Linq,Asenumerable,假设我的查询返回一个DataTable,它是电子邮件地址列表,一个名为“email”的varchar列;这些电子邮件被授权做一些事情 jane@doe.com mike@foo.com donald@duck.com 并且当前登录的用户是harry@houdini.com。他没有被授权。他不在名单上 是否可以使用Linq迭代数据行并返回布尔值false 或者返回一个null或Nothing或空的对象 本质上,我想知道 Authorized = List.Contains( "harry@ho

假设我的查询返回一个DataTable,它是电子邮件地址列表,一个名为“email”的varchar列;这些电子邮件被授权做一些事情

jane@doe.com
mike@foo.com
donald@duck.com
并且当前登录的用户是
harry@houdini.com
。他没有被授权。他不在名单上

是否可以使用Linq迭代数据行并返回布尔值
false

或者返回一个
null
Nothing
或空的对象

本质上,我想知道

 Authorized = List.Contains( "harry@houdini.com")
我很想知道如何在C#和VB中实现这一点


谢谢

这里的任何
都可能更干净:

bool exists = dataTable.AsEnumerable()
                       .Any(r => "harry@houdini.com".Equals(r[0]));
您可以将该列投影到字符串集合并使用
Contains
,但这似乎有些过分

或者定义主键并使用
DataRowCollection
上的本机
Contains
方法:

dataTable.PrimaryKey = dataTable.Columns[0];
bool exists = dataTable.Rows.Contains("harry@houdini.com");

Any
在这里可能更干净:

bool exists = dataTable.AsEnumerable()
                       .Any(r => "harry@houdini.com".Equals(r[0]));
您可以将该列投影到字符串集合并使用
Contains
,但这似乎有些过分

或者定义主键并使用
DataRowCollection
上的本机
Contains
方法:

dataTable.PrimaryKey = dataTable.Columns[0];
bool exists = dataTable.Rows.Contains("harry@houdini.com");

下面是使用
DataTable
的工作示例,如下所示

C#

VB
(在线转换)


下面是使用
DataTable
的工作示例,如下所示

C#

VB
(在线转换)


使用
Any()
方法检查是否有任何项与谓词匹配。显示的代码是问题的有效LINQ解决方案。它按原样编译和运行。@SLaks:我收到一个错误,
'Any'不是(DataRow的)EnumerablerRowCollection的成员。
我想我可能导入了错误的库(DataSetExtensions)?否,System.Data.DataTableExtensions具有相同的错误。是否导入了
System.Linq
?使用
Any()
方法检查是否有任何项与谓词匹配。显示的代码是该问题的有效Linq解决方案。它按原样编译和运行。@SLaks:我收到一个错误,
'Any'不是(DataRow的)EnumerablerRowCollection的成员。
我想我可能导入了错误的库(DataSetExtensions)?否,System.Data.DataTableExtensions具有相同的错误。您是否导入了
System.Linq
?当您想确定某个项是否包含在序列中时,为什么您认为“其中任何项等于此项”比使用
Contains
更清楚?使用
Contains
无需使用集合。源“集合”是一个
DataTable
,因此
Contains
如果没有主键或
DataRow
的自定义相等比较器,将无法工作。为什么您认为“其中任何项等于此项”比,如果要确定某个项目是否包含在序列中,请使用
Contains
?使用
Contains
无需使用集合。源“集合”是一个
DataTable
,因此
Contains
如果没有主键或
DataRow
的自定义相等比较器将无法工作。我正在尝试将其转换为VB:
Dim authorized as Boolean=dt.AsEnumerable()。Any(函数)s(0).等于(”mike@foo.com)
。我收到此错误:“'Any'不是'EnumerablerRowCollection(DataRow的)'的成员。您是否
导入了System.Linq
?啊哈,我认为DataTableExtensions已经具备了所需的所有功能。导入Linq。错误消失了。转换s(0).ToString.ToUpper后,
Any
比较返回true。谢谢。谢谢。但这是在线转换的,只是为了给OP一个想法。我正在尝试将其转换为VB:
Dim authorized as Boolean=dt.AsEnumerable()mike@foo.com)
。我收到此错误:“'Any'不是'EnumerablerRowCollection(DataRow的)'的成员。您是否
导入了System.Linq
?啊哈,我认为DataTableExtensions已经具备了所需的所有功能。导入Linq。错误消失了。转换s(0).ToString.ToUpper后,
Any
比较返回true。谢谢。谢谢。但这是在线转换的,只是为了给OP一个想法。