Так что я опубликовал это раньше.
IAsyncRepository или IObservableRepository для silverlight 4 + Службы данных WCF
Я работал над AsyncRepo для Silverlight, поэтому я просто застрял в небольшом месте.
Код только для объяснения ... прокрутите вниз, чтобы найти код преступника.
У меня есть репо, определенное так:
public interface IAsyncRepository<T> where T : class
{
void GetById(int id, Action<T> callback);
void GetAllFromQuery(Func<MyEntities, IQueryable<Product>> funcquery, Action<IList<Calculator>> callback)
}
Я использую WCF Data Services + Linq to Entities. Первый отлично работает вот так:
public void GetById(int id, Action<Product> callback)
{
MyEntities dat = new MyEntities(new Uri(..url..));
var query = from c in dat.Products where c.ID == id select c;//WATCH THIS
allQuery = new DataServiceCollection<Product>(dat);
allQuery.LoadAsync(query);
allQuery.LoadCompleted += (obj, evt) =>
{
if (allQuery == null)
{
callback(null);
}
else
{
callback(allQuery.FirstOrDefault());
}
};
}
Теперь ко второму способу:
Если вы заметили в приведенном выше методе, у меня есть запрос linq , который я использую для получения данных. Во втором методе репо Я хочу передать этот запрос от потребителя в метод.
Так что теперь ..
public void GetAllFromQuery(Func<MyEntities, IQueryable<Product>> funcquery, Action<IList<Product>> callback)
{
MyEntities dat = new MyEntities(..uri..);
allQuery = new DataServiceCollection<Product>(dat);
allQuery.LoadAsync(funcquery(dat));
allQuery.LoadCompleted += (obj, evt) =>
{
if (allCalcQuery == null)
{
callback(null);
}
else
{
callback(allQuery.ToList());
}
};
}
Пока никаких проблем ... пока ...
Я использую это так:
repo.GetAllFromQuery(
x => from p in x.Products where p.ID > 5 select p,
y => Assert.IsTrue(y.Count > 0));
Это дает мне:
cannot convert from 'lambda expression' to System.Func<MyEntities,IQueryable<Product.Calculator>>'
Я буду искренне уважать того, кто дает мне какое-либо решение. Это дало мне программисты блокировать весь день сегодня!