Разрешить LINQ-запрос между WebService и ClientApplication - PullRequest
1 голос
/ 27 января 2012

Цель: создать веб-сервис, который будет запрашивать базу данных и возвращать строки, затем передавать его клиентскому приложению и вставлять в DataGridView.

что я сделал:

    [WebMethod]
    public IEnumerable<DataRow> getTransactions(int client_id)
    {
        BankDataLINQDataContext DB = new BankDataLINQDataContext();
        IEnumerable<DataRow> query = (from u in DB.Transactions.AsEnumerable() where u.ClientID == client_id select u) as IEnumerable<DataRow>;
        return query;
    }

Проблема: 1. Нет ошибки перед компиляцией - ошибка произошла, пока я пытаюсь скомпилировать код. 2. Я понятия не имею, как подобрать данные в клиентском приложении. Я пытался передать его списком, но он не работал («Нет действительного источника»).

Пожалуйста, помогите ...

Ответы [ 2 ]

0 голосов
/ 01 февраля 2012

Я нашел это!

Сторона WebService:

    [WebMethod(Description="Pobranie operacji z konta bankowego")]
    public List<Transaction> GetTransactions(int clientID)
    {
        BankDataLINQDataContext DB = new BankDataLINQDataContext();
        List<Transaction> ListOfTrans = (from u in DB.Transactions  
                                      where u.ClientID == clientID 
                                      select u).ToList();

        return ListOfTrans;

    }

сторона клиента WebService:

        List<Transaction> ListToView = getalltransactions.GetTransactions(ClientID).ToList();
        GridView1.DataSource = ListToView;
        GridView1.DataBind();

Я надеюсь, что это решение будет полезно длякто то.Спасибо за все подсказки:)

0 голосов
/ 28 января 2012

Если ваш DataContext настроен так же, как и большинство Linq DataContexts, ваш запрос в скобках будет напечатан как IQueryable . Предполагая, что это правильно, вы пытаетесь преобразовать IQueryable в IEnumerable . Linq не будет автоматически выяснять, как конвертировать транзакцию в Datarow - вам нужно указать это самостоятельно. Так что ваш код должен выглядеть примерно так:

[WebMethod]
public IEnumerable<DataRow> getTransactions(int client_id)
{
    BankDataLINQDataContext DB = new BankDataLINQDataContext();
    var queryResults = (from u in DB.Transactions
                        where u.ClientID == client_id
                        select GetDataRow(u)).ToList();
    return query;
}

public static DataRow GetDataRow(Transaction transaction)
{
     // Convert to a DataRow
}

Изменить: Чтобы указать, в чем, на мой взгляд, проблема, вы не можете неявно / автоматически преобразовать IEnumerable в IEnumerable без выбора каждого отдельного члена в новый тип.

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