如何在Silverlight中添加/编辑DataServiceQuery LINQ预测?

时间:2013-11-23 02:40:00

标签: linq asynchronous wcf-data-services silverlight-5.0

Silverlight 5 / WCF数据服务5.6.0 /实体框架5 /异步LINQ DataServiceQuery

如何在后续执行中重置/删除/解除/删除我的DataServiceQuery LINQ查询中的投影?

考虑以下代码:

var query =
    (
      from c in context.Customers
      select new Customers()
      {
          ID = c.ID,
          Name = c.Name,
      }
    ) as DataServiceQuery<Customers>;


query.BeginExecute((result) =>
    Dispatcher.BeginInvoke(() =>
    {
        // process results from query...
        // query.EndExecute(result).ToList();

    }), null);

在上面的代码片段中,我正在创建一个带有两个投影(列)的LINQ查询,这两个投影将通过WCF数据服务返回ID和Name字段。这很好用;问题从下面开始......

在稍后执行的另一个方法中,我有一个类似的查询来获取其他列/投影。但是,下面的LINQ查询返回与上面相同的结果集,并忽略其他列:

var query =
    (
      from c in context.Customers
      select new Customers()
      {
          ID = c.ID,
          Name = c.Name,
          Age = c.Age,        // additional columns returning null
          Height = c.Height   // additional columns returning null

      }
    ) as DataServiceQuery<Customers>;


query.BeginExecute((result) =>
    Dispatcher.BeginInvoke(() =>
    {
        // process results from query...
        // query.EndExecute(result).ToList();

    }), null);

删除所有投影以返回所有列也会失败;我只是回到前面指定的初始ID和名称字段:

var query =
    (
      // No projections, just get ALL columns please!

      from c in context.Customers
      select c                        
    ) as DataServiceQuery<Customers>; 


query.BeginExecute((result) =>
    Dispatcher.BeginInvoke(() =>
    {
        // process results from query...
        // query.EndExecute(result).ToList();

    }), null);

如何让DataServiceQuery对象丢弃先前指定的投影?我没有选项来执行首先返回所有列的查询。

1 个答案:

答案 0 :(得分:0)

问题已解决:在执行任何LINQ查询之前,请在WCF数据服务上下文中设置以下MergeOption:

context.MergeOption = MergeOption.OverwriteChanges;

相关信息:

  1. http://social.msdn.microsoft.com/Forums/silverlight/en-US/f36d2643-661e-4048-88cf-a38df36a0b1a/linq-expand-and-dataservicequery

  2. WCF Data Service and Silverlight: DataServiceQuery<T> will not re-perform query