Linq to sql конвертирует IQueryable в набор данных - PullRequest
3 голосов
/ 06 октября 2009

Какой самый простой способ преобразовать объект IQueryable в набор данных?

Ответы [ 4 ]

3 голосов
/ 12 октября 2009

модель шредера имеет именно то, что вам нужно. Если у вас есть окружающий текст, и вам не нужны данные с точки зрения вашей модели, то решение nitzmahone отлично работает (если оно соответствует вашим настройкам, что мне не понятно)

2 голосов
/ 07 октября 2009

(yourDatacontext) .GetCommand (yourIQueryableHere), передача текста команды в объект DbCommand, вызов ExecuteReader, передача считывателя в метод набора данных .Load.

0 голосов
/ 17 сентября 2010

Если вы создаете DataTable из схемы, чтобы она соответствовала вашему LINQ to Sql, у меня есть метод расширения, который принимает IQueryable и заполняет DataTable:

public static DataTable AsDataTable(this IQueryable value, DataTable table)
{
    var reader = value.GetEnumerator();

    while (reader.MoveNext())
    {
        var record = (Customer)reader.Current;
        table.Rows.Add(record.CustomerID, record.City);
    }

    return table;
}

Обратите внимание, что приведение к Заказчику - это мой TEntity:

[Table(Name = "Customers")]
public class Customer
{
    [Column(IsPrimaryKey = true)]
    public string CustomerID;
    [Column]
    public string City;
}

Существуют и другие параметры, использующие отражение для создания вашей DataTable из класса Customer. Учитывая снижение производительности от отражения, я решил использовать следующий метод для построения моей таблицы:

public DataTable GetSchema(params string[] columns)
{
    string col_list;

    if (columns.Length == 0)
        col_list = "*";
    else
        col_list = String.Join(", ", columns);

    return Provider.QueryAsDataTable(string.Format("select top 0 {0} from customers", col_list));
}

Собрав все это вместе, я смог поместить результаты в мой DataGridView:

    dgridRO.DataSource = new DataView(rows.AsDataTable(dmap.GetSchema("CustomerID", "City")));


**

ID10TException:

** Я потратил все эти усилия на преобразование IQueryable в DataTable, чтобы создать DataView в качестве источника для DataGridView. Ну, я знаю, что мне не нужно было делать это сейчас.

0 голосов
/ 06 октября 2009

Возможно, проще всего написать реализацию IDataReader, которая может обернуть IEnumerable (IQueryable - это IEnumberable) Здесь есть реализация . Затем вы можете вызвать DataTable.Load (IDataReader).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...