#c# #.net #vb.net #linq #linq-to-sql
#c# #.net #vb.net #linq #linq-to-sql
Вопрос:
Вопрос: Я хочу заполнить таблицу LINQ из кода, а не из базы данных.
Возможно ли это?
System.Data.Linq.Table<Question> myquestions = new System.Data.Linq.Table<Question>();
Затем что-то вроде:
myquestions.Rows.Add(aquestion);
Ответ №1:
Просто заполните обычную таблицу данных, и вы сможете использовать ее из LINQ
using System;
using System.Data;
namespace ConsoleApplication10
{
class Program
{
static void Main(string[] args)
{
var dt = new DataTable();
dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("Project Name", typeof(string));
dt.Columns.Add("Project Date", typeof(DateTime));
for (int i = 0; i < 10; i )
{
var row = dt.NewRow();
row.ItemArray = new object[] { i, "Title-" i.ToString(), DateTime.Now.AddDays(i * -1) };
dt.Rows.Add(row);
}
var pp = from p in dt.AsEnumerable()
where (int)p["Id"] > 2
select p;
foreach (var row in pp)
{
Console.WriteLine(row["Id"] "t" row["Project Name"] "t" row["Project Date"]);
}
Console.ReadLine();
}
}
}
В приведенном выше коде вы можете увидеть, как использовать LINQ для фильтрации определенных записей из DataTable. Вам нужно будет добавить сборку System.Data.DataSetExtensions к вашим ссылкам
IEnumerables доступны только для чтения, поэтому вы не можете сделать это так, как вы просите, но то, что я представил, является правильным способом.
Комментарии:
1. Ошибка: System.Data.DataTable не содержит определения для AsEnumerable … (.NET 4.0, ASP.NET MVC 3)
2. The . Метод AsEnumerable() доступен в другой сборке с именем System.Data.DataSetExtensions, поэтому вам нужно будет добавить ссылку на эту сборку. Обычно в новых проектах (Vs.NET 2010) эта сборка добавлена по умолчанию.
3. Поскольку он полностью определил свою таблицу в примере, я думаю, что OP, возможно, не включил систему. Пространство имен Linq? РЕДАКТИРОВАТЬ: Ninja’d
4. PS: dt.Столбцы. Добавить(«Id», typeof(int)); // Намного проще
5. @ Затруднение, да, ты прав. Я только что набрал код для вас, обычно я не использую таблицы данных 🙂
Ответ №2:
Возможно, вы что-то неправильно поняли. LINQ — это язык запросов без побочных эффектов. Таким образом, вы не можете заполнить ею какую-либо структуру. Вы можете создать запрос только к любой существующей информации и выполнить какое-либо преобразование или фильтрацию.
Впоследствии вы можете использовать этот запрос для заполнения некоторого элемента с помощью foreach()
, ToList()
или ToArray()
, но вы не можете напрямую использовать LINQ для вставки любого элемента в какой-либо другой объект или коллекцию.