Подтвердить что ты не робот

Linq: выберите значение в столбце данных

Как вы используете LINQ (C#) для выбора значения в определенном столбце для определенной строки в datatable. Эквивалентным SQL будет:

select NAME from TABLE where ID = 0

Спасибо заранее.

4b9b3361

Ответ 1

var name = from r in MyTable
            where r.ID == 0
            select r.Name;

Если строка уникальна, вы можете просто сделать:

var row = DataContext.MyTable.SingleOrDefault(r => r.ID == 0);
var name = row != null ? row.Name : String.Empty;

Ответ 2

Спасибо за ваши ответы. Я не понял, какой тип объекта "MyTable" был (в ваших ответах), а следующий код дал мне ошибку, показанную ниже.

DataTable dt = ds.Tables[0];
var name = from r in dt
           where r.ID == 0
           select r.Name;

Не удалось найти реализацию шаблона запроса для типа источника "System.Data.DataTable". 'Где' не найдено

Итак, я продолжил свой поисковик и нашел что-то, что работает:

var rowColl = ds.Tables[0].AsEnumerable();
string name = (from r in rowColl
              where r.Field<int>("ID") == 0
              select r.Field<string>("NAME")).First<string>();

Как вы думаете?

Ответ 3

Я замечаю, что другие дали синтаксис без лямбды, поэтому просто чтобы это было полно, я поставлю эквивалент синтаксиса лямбда:

Не-лямбда (согласно сообщению Джеймса):

var name = from i in DataContext.MyTable
           where i.ID == 0
           select i.Name

Эквивалентный синтаксис лямбда:

var name = DataContext.MyTable.Where(i => i.ID == 0)
                              .Select(i => new { Name = i.Name });

Там не очень много практических различий, просто личное мнение, по которому вы предпочитаете.

Ответ 4

Если возвращаемое значение является строкой, и вам нужно выполнить поиск по идентификатору, вы можете использовать:

string name = datatable.AsEnumerable().Where(row => Convert.ToInt32(row["Id"]) == Id).Select(row => row.Field<string>("name")).ToString();

или с помощью общей переменной:

var name = datatable.AsEnumerable().Where(row => Convert.ToInt32(row["Id"]) == Id).Select(row => row.Field<string>("name"));

Ответ 5

var x  =  from row in table
          where row.ID == 0
          select row

Предположим, что у вас есть DataTable, который знает о строках, другой разумный вам потребуется использовать индекс строки:

where row[rowNumber] == 0

В этом случае вы также хотите использовать выбор, чтобы помещать данные строки в анонимный класс или предварительно подготовленный класс (если вы хотите передать его другому методу)

Ответ 6

var name = from DataRow dr in tblClassCode.Rows where (long)dr["ID"] == Convert.ToInt32(i) select (int)dr["Name"]).FirstOrDefault().ToString() 

Ответ 7

Используйте linq и установите таблицу данных как Enumerable и выберите поля из поля таблицы данных, которые соответствуют тому, что вы ищете.

Пример

Я хочу получить идентификатор валюты и валюту Имя из таблицы валют, где валютой является местная валюта, и присвоить идентификатор и имя валюты текстовым полям формы:

DataTable dt = curData.loadCurrency();
            var curId = from c in dt.AsEnumerable()
                        where c.Field<bool>("LocalCurrency") == true
                        select c.Field<int>("CURID");

            foreach (int cid in curId)
            {
                txtCURID.Text = cid.ToString();
            }
            var curName = from c in dt.AsEnumerable()
                          where c.Field<bool>("LocalCurrency") == true
                          select c.Field<string>("CurName");
            foreach (string cName in curName)
            {
                txtCurrency.Text = cName.ToString();
            }