Как добавить / отредактировать 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;
Информация по теме: