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");
Другие вопросы по тегам