Сведения о вопросе

PIRLO

16:03, 1st July, 2020

Теги

c#   linq   web-services   .net-3.5    

Заполнение DataSet или DataTable из результирующего набора запроса LINQ

Просмотров: 645   Ответов: 6

Как можно представить запрос LINQ как веб-службу ASMX? Обычно с бизнес-уровня я могу вернуть типизированный DataSet или DataTable , который может быть сериализован для транспорта через ASMX.

Как я могу сделать то же самое для запроса LINQ? Есть ли способ заполнить типизированный DataSet или DataTable с помощью запроса LINQ?

public static MyDataTable CallMySproc()
{
    string conn = "...";

    MyDatabaseDataContext db = new MyDatabaseDataContext(conn);
    MyDataTable dt = new MyDataTable();

    // execute a sproc via LINQ
    var query = from dr
                in db.MySproc().AsEnumerable
                select dr;

    // copy LINQ query resultset into a DataTable -this does not work !    
    dt = query.CopyToDataTable();

    return dt;
}

Как я могу получить результирующий набор запроса LINQ в DataSet или DataTable ? Кроме того, можно ли сериализовать запрос LINQ, чтобы я мог представить его как веб-службу ASMX?



  Сведения об ответе

crush

18:03, 1st July, 2020

Как уже упоминалось в вопросе, IEnumerable имеет метод CopyToDataTable :

IEnumerable<DataRow> query =
    from order in orders.AsEnumerable()
    where order.Field<DateTime>("OrderDate") > new DateTime(2001, 8, 1)
    select order;

// Create a table from the query.
DataTable boundTable = query.CopyToDataTable<DataRow>();

Почему это не сработает для тебя?


  Сведения об ответе

LAST

18:03, 1st July, 2020

Чтобы выполнить этот запрос к классу DataContext , необходимо выполнить следующие действия:

MyDataContext db = new MyDataContext();
IEnumerable<DataRow> query = 
    (from order in db.Orders.AsEnumerable()
        select new
        {
            order.Property,
            order.Property2
        })
    as IEnumerable<DataRow>;
return query.CopyToDataTable<DataRow>();

Без as IEnumerable<DataRow>; вы увидите следующую ошибку компиляции:

Невозможно неявно преобразовать тип 'System.Collections.Generic.IEnumerable' в 'System.Collections.Generic.IEnumerable'. Существует явное преобразование (вы пропускаете приведение?)


  Сведения об ответе

screen

18:03, 1st July, 2020

Сделайте набор объектов передачи данных, пару картографов и верните их через систему .службы ASMX.
Вы никогда не должны предоставлять объекты базы данных напрямую, так как изменение схемы процедуры будет распространяться на потребителя веб-службы незаметно для вас.


  Сведения об ответе

lesha

18:03, 1st July, 2020

Если вы используете возвращаемый тип IEnumerable, вы можете вернуть переменную запроса напрямую.


  Сведения об ответе

crush

18:03, 1st July, 2020

Создайте объект класса и верните list(T) запроса.


  Сведения об ответе

SKY

18:03, 1st July, 2020

Если вы используете возвращаемый тип IEnumerable. Это помогает вернуть переменную запроса напрямую.

MyDataContext db = new MyDataContext();
IEnumerable<DataRow> query = 
    (from order in db.Orders.AsEnumerable()
        select new
        {
            order.Property,
            order.Property2
        })
    as IEnumerable<DataRow>;
return query.CopyToDataTable<DataRow>();


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться