Выберите один столбец из набора данных с помощью LINQ
Просто получаю голову от всего этого материала LINQ, и кажется, что я застрял в первом препятствии.
У меня есть datatable как таковой:
OrderNo LetterGroup Filepath
----------- ----------- --------------------------------------------------
0 0 Letters/SampleImage.jpg
0 0 Letters/UKPC7_0.jpg
0 0 Letters/UKPC8_0.jpg
Мне нужно, чтобы все пути файлов из столбца Filepath в массив String. Я думал, что LINQ будет идеально подходит для этого (я прав?), Но не может построить правильный запрос.
Может ли кто-нибудь предоставить некоторые образцы кода, которые укажут мне в правильном направлении? Я искал вокруг - но, похоже, никуда не денусь.
Ответы
Ответ 1
Существуют методы расширения, упрощающие работу с наборами данных:
using System.Data.Linq;
var filePaths =
from row in dataTable.AsEnumerable()
select row.Field<string>("Filepath");
var filePathsArray = filePaths.ToArray();
Вы также можете использовать синтаксис метода, чтобы поместить его в один оператор:
var filePaths = dataTable
.AsEnumerable()
.Select(row => row.Field<string>("Filepath"))
.ToArray();
Ответ 2
string[] filePaths = (from DataRow row in yourDataTable.Rows
select row["Filepath"].ToString()).ToArray();
Ответ 3
Если вы хотите полностью использовать LINQ, настройте свою базу данных и создайте объект контекста. Тогда вы сможете сделать что-то вроде этого:
var filepaths = from order in _context.Orders
select order.Filepath;
Это предполагает, что ваша таблица для строки имеет имя "Заказы", которое, как я полагаю, по имени вашего первого столбца заказа. Если вы хотите вернуть набор номеров заказов, а затем для использования позже, чтобы узнать, откуда пришел путь к файлу, вы можете сделать что-то вроде этого:
var results = from order in _context.Orders
select new
{
order.OrderNo,
order.Filepath
}
Это даст вам новый анонимный тип, содержащий оба эти значения в качестве свойств.