Как добавить / отредактировать DataServiceQuery LINQ Projection в Silverlight?

Silverlight 5 / Службы данных WCF 5.6.0 / Entity Framework 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 с двумя проекциями (столбцами), которые возвращают поля ID и Name через службы данных WCF. Это отлично работает; проблема начинается ниже...

В другом методе, который выполняется позже, у меня есть аналогичный запрос для получения дополнительных столбцов / проекций. Однако приведенный ниже запрос 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 для отмены ранее указанных проекций? У меня нет возможности выполнить запрос, который сначала возвращает все столбцы.

1 ответ

Устранена проблема. Перед выполнением любого запроса LINQ установите следующий MergeOption в контексте службы данных WCF:

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 и Silverlight: Data ServiceQuery не будет повторно выполнять запрос

Другие вопросы по тегам