m.kolbadi Ответов: 1

Как преобразовать IQueryable в Dataset в LINQ to SQL


В проекте 3 слоя я получаю данные с процедурой хранения в слоях доступа к данным и хочу преобразовать их в datatable(для привязки в gridview).
IQueryable не поддерживается со стороны сервера подкачки.


Я нашел этот путь:
public DataTable GetInfo(int Id)
{
   db = new DataClassesDataContext();
DataTable dt=new DataTable();
dt.Columns.Add("ID");
dt.Columns.Add("Name");
var query=db.spGetInf(id) .AsQueryable();
    var reader = value.GetEnumerator();

    while (reader.MoveNext())
    {
        var rw =reader.Current;
        dt.Rows.Add(rw.Id, rw.name);
    }

    return dt;
}

1 Ответов

Рейтинг:
0

Nathan Minier

Существует довольно много информации о том, как обеспечить обратную совместимость с ASP.NET gridviews из LINQ там, в частности, взгляните на эту тему:
http://stackoverflow.com/questions/1595350/why-am-i-not-getting-copytodatatable-in-linq-query[^]


m.kolbadi

это работает,но у меня есть одна проблема, я использую процедуру хранения и ваше решение dosent работает с SP

Nathan Minier

Я просто потратил на это немного времени, когда понял, что я далеко не так хорошо знаком с LINQtoSQL, как следовало бы. Похоже, самым простым решением, чтобы использовать ObjectDataSource его вместо управления linqdatasource для того, чтобы обеспечить поддержку СП. Ваше решение должно быть прекрасным, но я бы предложил небольшое изменение в нем из-за одноразовой природы DataContext.

public DataTable GetInfo(int Id)
{
использование(var db = new DataClassesDataContext())
{
DataTable dt=новый DataTable();
ДТ.колонны.Добавить(“ID”);
ДТ.колонны.Добавить(“Имя”);
ВАР запрос=БД.spGetInf(ИД) .AsQueryable();
var reader = значение.Метод getenumerator();

в то время как (читатель.метод MoveNext())
{
var rw =считыватель.Текущий;
ДТ.Строк.Добавить(ПС.ИД, РВ.название);
}

возврат dt;
}
}

Это позволит контексту распоряжаться и позволит избежать некоторых проблем с неуправляемыми ресурсами в будущем.