解决WebService和ClientApplication之间的LINQ查询

本文关键字:LINQ 查询 之间 ClientApplication WebService 解决 | 更新日期: 2023-09-27 18:21:34

目标:创建将查询数据库并返回行的Web服务,然后将其传递给客户端应用程序并插入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.我不知道如何在客户端应用程序中提取数据。我试图通过列表,但它没有工作("没有有效的来源")。

请帮忙。。。

解决WebService和ClientApplication之间的LINQ查询

如果您的DataContext是像大多数Linq DataContext一样设置的,那么括号中的查询将被键入为IQueryable<事务>。假设这是正确的,则您正在尝试投射IQueryable<Transaction>转换为IEnumerable<DataRow>。Linq不会自动找出如何在Transaction和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<T> 转换为IEnumerable<U> 而不将每个单独的成员选择到新的类型中。

我找到了!

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();

我希望这个解决方案对某些人有用。感谢所有提示:)