gpt4 book ai didi

c# - 传递给存储库方法的表达式未正确编译

转载 作者:行者123 更新时间:2023-11-30 23:25:08 24 4
gpt4 key购买 nike

我的 ViewModel 中有以下调用。

Order order= await DataService.Orders.GetAsync(p => p.Id == Guid.Parse("07fafcd9-10db-e511-848d-005056b94716"));

Orders 存储库具有以下方法。

public async Task<T> GetAsync(Expression<Func<T, bool>> predicate)
{
return await Db.FindAsync<T>(predicate).ConfigureAwait(false);
}

Db 属性属于 SQLiteAsyncConnection 类型。我在上面提供的谓词将转换为以下表示。

{p => (p.Id == Parse("07fafcd9-10db-e511-848d-005056b94716"))}

上面的谓词将抛出一个异常并显示以下信息

no such function: parse

所以我将 Guid.Parse 函数向下传递,它不存在,如果我有以下谓词,它将抛出类似的异常。

Order order= await DataService.Orders.GetAsync(p => p.Id == anotherInstanceObject.Id);

解决方案是用传递实际值替换我的代码。

Guid guid = Guid.Parse("07fafcd9-10db-e511-848d-005056b94716");
Order order= await DataService.Orders.GetAsync(p => p.Id == guid);

但是上面的内容非常反直觉,并且会在开发人员开始使用 DataService 类时引入很多问题。

我正在使用 SQLite.Net-PCL用于我的数据访问。

要使谓词正确编译为我的存储库方法,我缺少什么?

最佳答案

Linq 提供程序在它们支持的模式方面有所不同。你的无法识别 Guid.Parse。这是EF吗?众所周知,EF 无法识别许多实际上可以转换为 SQL 或在本地评估的基本 .NET Framework 功能。

what am I missing

没有。除了修补 EF 或编写您自己的代理 LINQ 提供程序之外,没有其他方法可以使 EF 支持这一点,这需要一周的工作。

你需要忍受这个。如果没有存储库,您会遇到同样的问题。您只是不能使用 EF 编写此类 Linq 查询。

关于c# - 传递给存储库方法的表达式未正确编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37447117/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com