无法将 lambda 表达式转换为 Func;当尝试传递 IQueryable 时
所以我之前发布了这个: 适用于 silverlight 4 + WCF 数据服务的 IAsyncRepository 或 IObservableRepository
我'一直在为 Silverlight 开发 AsyncRepo,所以我只是陷入了一个小地方。
该代码仅用于解释...滚动到底部查看罪魁祸首代码。
我有一个这样定义的存储库:
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 数据服务 + 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));
这给了我:
无法从 'lambda 表达式' 转换为 System.Func
我将真正尊重为我提供任何解决方案的人。这让我程序员今天一整天都受阻!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
编辑:好的,现在拼写错误已修复,请尝试非查询版本(我认为无论如何更简单):
EDIT: Okay, now the typo's fixed, try the non-query version (which I think is simpler anyway):