无法将 lambda 表达式转换为 Func;当尝试传递 IQueryable

发布于 2024-10-23 00:10:22 字数 2478 浏览 1 评论 0 原文

所以我之前发布了这个: 适用于 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>'

我将真正尊重为我提供任何解决方案的人。这让我程序员今天一整天都受阻!

So I posted this earlier.:
IAsyncRepository or IObservableRepository for silverlight 4 + WCF Data Services

I've been working on an AsyncRepo for Silverlight so I've just got stuck at a small place.

The code is just for the explanation...scroll to bottom for the culprit code.

I have a repo defined like this:

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

I'm using WCF Data Services + Linq to Entities. The first one works perfect like this:

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

Now to the second method:

If you notice in the above method, I have a linq query I use to get the data. In my second repo method, I want to pass this query from the consumer into the method.

So now..

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

No problem so far... until...

I use it like this:

        repo.GetAllFromQuery(
            x => from p in x.Products where p.ID > 5 select p,
            y => Assert.IsTrue(y.Count > 0));

This gives me :

cannot convert from 'lambda expression' to System.Func<MyEntities,IQueryable<Product.Calculator>>'

I will truly respect someone who gives me any solution. This has given me programmers block all day today!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

君勿笑 2024-10-30 00:10:22

编辑:好的,现在拼写错误已修复,请尝试非查询版本(我认为无论如何更简单):

repo.GetAllFromQuery(
    x => x.Products.Where(p => p.ID > 5),
    y => Assert.IsTrue(y.Count > 0));

EDIT: Okay, now the typo's fixed, try the non-query version (which I think is simpler anyway):

repo.GetAllFromQuery(
    x => x.Products.Where(p => p.ID > 5),
    y => Assert.IsTrue(y.Count > 0));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文