使用ADO.Net数据服务和LINQ选择单值

时间:2009-07-22 11:13:27

标签: c# linq wcf-data-services

尝试ADO.Net数据服务。所有示例都显示了如何检索列表,但是如何检索单个值呢?例如产品X的价格。

这是我使用的LINQ查询:

  

var qry =(来自p in   svcContext.Products                         其中p.ProductName ==“椅子”                         &安培;&安培; p.Colour == 1                         选择c)作为DataServiceQuery;

     

产品returnProd;

     

qry.BeginExecute(                   (pr)=> returnedProd = qry.EndExecute(pr).First(),null);

这里我尝试检索产品并将其加载到局部变量中,但本地var保持为空。

非常确定,我完全错了:))...非常感谢任何帮助。

4 个答案:

答案 0 :(得分:1)

不应该是

var qry =(来自p在svcContext.Products中的p,其中p.ProductName ==“Chair”&& p.Colour == 1 select p)你在哪里声明c?

答案 1 :(得分:0)

抱歉应该是

  

var qry =(来自p in   svcContext.Products在哪里   p.ProductName ==“Chair”&& p.Colour   == 1选择p)作为DataServiceQuery<产品&gt ;;

答案 2 :(得分:0)

如果结果集为空,

First()应抛出异常 - 您确定查询是否正在执行?

答案 3 :(得分:0)

您不是第一个受到所有Silverlight传出请求的异步性质影响的人。

在lambda表达式中

(pr) => returnedProd = qry.EndExecute(pr).First() 

你捕获局部变量returnedProd但是通常会在调用AFTER BeginExecute后关闭的线程为时已晚。它可能会在执行超出当前方法范围后执行,变量将丢失。

解决方案是有效地使用“returnedProd”来填充UI或者你需要做什么 IN lambda表达式。类似的东西:

(pr) => {
    returnedProd = qry.EndExecute(pr).First();
    MessageBox.Show("Retrieved record" + returnedProd.Id);
}

社区的其他有用的答案,我希望我几周前有一个:(