问题标签 [linqkit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
entity-framework - 包含不适用于 LinqKit AsExpandable
我正在尝试LinqKit
AsExpandable
在我的EfCore2.0
项目中使用,但我遇到了这个Includes
不起作用的问题。
在尝试调试时,我LinqKit
从 github 下载了源代码,并将项目中的Nuget
引用替换为项目引用。
在调试LinqKit
项目时,我注意到我的调用Include
没有达到我设置的断点ExpandableQueryOfClass<T>.Include
。
我做了一些进一步的测试,并注意到如果我第一次转换到断点会被命中ExpandableQueryOfClass
(这是我公开的一个内部类LinqKit
,所以如果我引用Nuget
包,我就无法进行转换)。
这是一个错误LinqKit
还是我做错了什么?
这是我的测试代码。
编辑: LinqKit github 存储库上2018-05-15
有一个未解决的问题。
c# - 在 SelectMany LINQ to Entity Framework 中使用 PredicateBuilder
这是我第一次在 stackoverflow 上写这篇文章。
我想在带有 SelectMany 的 LINQ 查询中使用 PredicateBuilder。
我输入我的代码
我像这样创建谓词
我在使用固定数据而不是 PredicateBuilder 的 LINQPAD 上尝试了这种方法,并且查询有效。但是使用 PredicateBuilder 我得到 .NET Framework 数据提供程序错误 1025。
我该如何解决?我希望能够创建一个动态查询,该查询从接口获取参数并返回结果。
我希望你能帮助我。
c# - 尝试使用使用 LinqKit 创建的基本表达式时出现异常
我试图通过使用 LinqKit强制 ef-core 参数化它认为是本文中描述的常量的值。
尝试应用github 上描述的 PredicateBuilder 示例时,出现异常。这是我的代码:
当点击 ToListAsync() 时出现以下异常:
System.NotSupportedException:'无法解析表达式'w.WalletItems.Any(__Compile_0)':给定参数与预期参数不匹配:'System.Linq.Expressions.TypedParameterExpression'类型的对象无法转换为'System. Linq.Expressions.LambdaExpression'。
我正在使用以下包在 ASP.NET Core 2.1 应用程序 (netcoreapp2.1) 中运行代码:
- Microsoft.EntityFrameworkCore.Relational (2.1.1)
- Microsoft.EntityFrameworkCore.SqlServer (2.1.1)
- LinqKit.Microsoft.EntityFrameworkCore (1.1.15)
非常感谢任何帮助。
c# - c#中表达式树的单元测试
如何在 C# 中为表达式树编写单元测试。
我有这个需要测试的课程。此方法返回一个表达式树,并获取一个作为参数。
代码:
任何意见将是有益的。谢谢。
更新 #1 我已将 LinqKit 用于 ExpressionStarter
c# - 使用表达式> 在另一个表达式中>
我试图让我的头脑围绕组合表达式,环顾四周,应该可以做我想做的事情,但我正在努力。
我有一个Expression<Func<class, dynamic>>
定义了我最终针对我的 EF 上下文运行的选择,我class
从中选择数据的表在哪里。例如:
我想要做的是然后将该表达式中的通用逻辑提取到静态“帮助”样式表达式中,例如,我可以重复使用,而不是在我的第一个表达式中包含这一行
RecordHasPaid = foo.bar.Amount != null && foo.bar.Amount > 0
我可以有一个可重用的表达式,存储在一个可重用的类中,例如ExpressionHelper
,然后我可以将其插入到我的第一个表达式中:
变成:
请注意,我向这个表达式传递了一个与我的外部表达式不同的参数(希望我可以是通用的)。
听起来不错,编译得很好,但是 - 当我开始运行 .Select 时,我得到了可怕的错误:
LINQ to Entities 无法识别方法 'System.Linq.Expressions.Expression1[System.Func2[bar,System.Boolean]] BarHasPaid(bar)' 方法,并且该方法无法转换为存储表达式。
我理解发生这种情况的原因(至少我认为是这样),因为我的方法未知,因此无法翻译成 SQL,此外,我的表达式无法转换为对 EF 有意义的表达式树,因为我本质上是在使用两种不同的表达方式,它不知道如何将它们变成有意义的东西。
我尝试了各种方法,将诸如此处的表达式组合在一起,不幸的是,当您有两个表达式而不是另一个表达式中的一个表达式时,这似乎可以工作。
我也尝试过使用此处提到的自定义 ExpressionVisitor 实现包装/解包(我最终确实让它编译得很好,但我得到了同样的错误)
我还尝试了许多其他类似的答案,并尝试使用 LinqKit 来Expand
表达我的表达方式,并且设置我的上下文AsExpandable
也无济于事。到目前为止,我的所有尝试都导致了上述错误,或者在尝试组合 usingLambdaExpression.Lambda
来编译我的组合表达式时导致了这个错误:
从范围“”引用的类型变量“foo”但未定义
foo
我认为这是被抛出的,因为在我的外部表达式中使用的变量,在我的表达式Expression<Func<foo, dynamic>>
中不存在,Expression<Func<bar, bool>>
因为当它们组合时产生的表达式没有意义。
不幸的是,我认为我对我正在尝试做的事情的理解不够深入,所以我在下一步转向哪里时遇到了一些死胡同。任何关于这是否可能和/或如何实现它的建议将不胜感激。
编辑:我使用 Rextester 创建了两个示例项目,这是工作示例,这就是导致错误的原因- 使用此在线工具,您实际上可以看到应该运行什么 EF,但由于没有 EF 可以针对错误运行它在那次测试期间实际上并没有发生。
lambda - C#如何将Linq Lambda参数传递给SwitchExpression并接收表达式> 在 Lambda 中。Where(...)
C# 如何将 Linq Lambda 参数传递给 SwitchExpression 并将表达式返回到 .Where(...) Lambda Linq Queryable
我编写了一个 linq Lambda 查询,我想在此代码中使用声明 SwitchExpression 的 Func 并在此代码中使用 where(p=>...) 使用 predicat ,就像这样:
型号是:
1) 第一次测试:
当调用此方法并且我想将参数传递给 SwitchCase_Predicate(...) 它有错误,因为返回类型是表达式并且不应该传递动态参数。如果像下面这样使用但不允许在 .where(...) 中传递参数:
2) 第二次测试:
如何在 where(...) 中传递参数,如“First Test”,并返回表达式谓词以在 .where(...) 中正确使用
请帮助解决这个问题。
c# - LinqKit Predicate Or with Contains 计算为等于
我正在搜索我的应用程序。搜索工作除了当用户的搜索通过搜索相关实体进行级联时。我已经调试了代码并测试了 Entity Framework 生成的 SQL。我发现问题是Contains()
在 SQL 中应该是“LIKE”时转换为“=”。Contains()
按照我对 FirstName、MiddleName 等的初始谓词的预期工作,但不在if (cascade)
代码块中。
我的 C# 搜索逻辑:
从 EF 生成的 SQL:
有问题的 SQL(最后一个 WHERE 子句):
它应该是什么样子:
所以我的问题是,如何在我的实体框架 SQL 中将此代码转换为 LIKE?
c# - 用于创建表达式的 PredicateBuilder 辅助函数
我有一个表单来搜索条件,我使用 PredicateBuilder 将所有条件组合到 WHere 表达式中 - 并且 EF 生成 sql 以在数据库端进行评估。
为了允许用户在相等、开头、结尾和包含之间进行选择,我使用星号通配符。
这是我的代码:
结束等...
我想写一个通用的辅助函数,以方便使用:
我现在的尝试:
我现在不知道如何访问选定的成员(通过函数表达式),而且我不确定我的方向是否正确,我很乐意提供帮助!
c# - EFCore 枚举到字符串值的转换未在 where 子句中使用
我的 Linq where 子句如何翻译成 Sql 时遇到问题。
我正在使用EnumToStringConverter
将我的实体的属性映射enum
到文本数据库列中。当仅从 DbContext 查询我的实体时,这一切都很好。
然后我开始使用 LinqKit 和 Expressions 来拥有可重用的过滤器。我创建了一个表达式,它接受我的实体并作为对实体其他属性的一些计算的结果给出我的枚举。我会尝试用代码来解释自己,因为语言让我失望。我会写一个例子,所以我不必发布完整的代码,但逻辑是一样的。您可以在此处找到包含项目的 GitHub 存储库来复制该问题:https ://github.com/pinoy4/efcore-enum-to-string-test
模型类:
FluentAPI 配置
Linq 表达式是使用静态方法生成的。A有两个:
现在我们有了上面的代码,我写了一个这样的查询:
这将被翻译成以下 SQL:
问题是该CASE
语句正在将'Overdue'
(使用 正确翻译EnumToStringConverter
)与一个表达式进行比较,该表达式在 true 时给出int
(2 是 MyEnum.Overdue 情况的值string
),在 false 时给出(e.status)。这显然是无效的 SQL。
我真的不知道如何解决这个问题。有什么帮助吗?