解决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.我不知道如何在客户端应用程序中提取数据。我试图通过列表,但它没有工作("没有有效的来源")。
请帮忙。。。
如果您的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();
我希望这个解决方案对某些人有用。感谢所有提示:)