【问题标题】:How to add/edit DataServiceQuery LINQ Projections in Silverlight?如何在 Silverlight 中添加/编辑 DataServiceQuery LINQ 投影?
【发布时间】:2013-11-24 01:31:21
【问题描述】:

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

在上面的 sn-p 中,我正在创建一个带有两个投影(列)的 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 和 Name 字段:

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 对象放弃先前指定的投影?我没有执行首先返回所有列的查询的选项。

【问题讨论】:

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


    【解决方案1】:

    问题已解决:在执行任何 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

    【讨论】:

      猜你喜欢
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-09
      • 1970-01-01
      • 2012-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多