DataTable AsEnumerable соответствует одному значению
Допустим, мой запрос возвращает DataTable, представляющий собой список адресов электронной почты, один столбец varchar, называемый "email"; Эти письма разрешают что-то делать.
jane@doe.com
mike@foo.com
donald@duck.com
И текущий вошедший в систему пользователь harry@houdini.com
, Он не авторизован. Его нет в списке
Можно ли перебрать DataRows с помощью Linq и вернуть логическое значение false
?
Или вернуть объект, который null
или же Nothing
или пусто?
По сути, я хотел бы знать версию Linq
Authorized = List.Contains( "harry@houdini.com")
Мне бы очень хотелось узнать, как это сделать как в C#, так и в VB.
Спасибо
2 ответа
Вот рабочий пример с DataTable
следующее
В C#
DataTable dt = new DataTable();
dt.Columns.Add("emails");
dt.Rows.Add("jane@doe.com");
dt.Rows.Add("mike@foo.com");
dt.Rows.Add("donald@duck.com");
var authorized = dt.AsEnumerable().Any(s => s[0].Equals("mike@foo.com")); //returns True
var notAuthorized = dt.AsEnumerable().Any(s => s[0].Equals("harry@houdini.com")); //returns False
В VB
(Конвертируется онлайн)
Dim dt As DataTable = New DataTable
dt.Columns.Add("emails")
dt.Rows.Add("jane@doe.com")
dt.Rows.Add("mike@foo.com")
dt.Rows.Add("donald@duck.com")
Dim authorized As var = dt.AsEnumerable.Any(() => { },
s(0).Equals("mike@foo.com"))
Dim notAuthorized As var = dt.AsEnumerable.Any(() => { },
s(0).Equals("harry@houdini.com"))
Any
здесь, наверное, чище:
bool exists = dataTable.AsEnumerable()
.Any(r => "harry@houdini.com".Equals(r[0]));
Вы можете проецировать столбец в коллекцию строк и использовать Contains
, но это кажется излишним.
Или определите первичный ключ и используйте нативный Contains
метод на DataRowCollection
:
dataTable.PrimaryKey = dataTable.Columns[0];
bool exists = dataTable.Rows.Contains("harry@houdini.com");