Как вы используете LINQ (C#)
для выбора значения в определенном столбце для определенной строки в datatable
. Эквивалентным SQL
будет:
select NAME from TABLE where ID = 0
Спасибо заранее.
Как вы используете LINQ (C#)
для выбора значения в определенном столбце для определенной строки в datatable
. Эквивалентным SQL
будет:
select NAME from TABLE where ID = 0
Спасибо заранее.
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;
Спасибо за ваши ответы. Я не понял, какой тип объекта "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>();
Как вы думаете?
Я замечаю, что другие дали синтаксис без лямбды, поэтому просто чтобы это было полно, я поставлю эквивалент синтаксиса лямбда:
Не-лямбда (согласно сообщению Джеймса):
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 });
Там не очень много практических различий, просто личное мнение, по которому вы предпочитаете.
Если возвращаемое значение является строкой, и вам нужно выполнить поиск по идентификатору, вы можете использовать:
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"));
var x = from row in table
where row.ID == 0
select row
Предположим, что у вас есть DataTable, который знает о строках, другой разумный вам потребуется использовать индекс строки:
where row[rowNumber] == 0
В этом случае вы также хотите использовать выбор, чтобы помещать данные строки в анонимный класс или предварительно подготовленный класс (если вы хотите передать его другому методу)
var name = from DataRow dr in tblClassCode.Rows where (long)dr["ID"] == Convert.ToInt32(i) select (int)dr["Name"]).FirstOrDefault().ToString()
Используйте 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();
}