Заполнить таблицу LINQ в коде?

#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 для вставки любого элемента в какой-либо другой объект или коллекцию.