问题标签 [linq-expressions]

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.

0 投票
0 回答
104 浏览

reflection - 如何判断类中的属性是否由 AutoMapper 映射?

我正在开发一个与 AutoMapper 紧密集成的项目(完全开源)。我要做的是:我想知道,在运行时,哪些是 AM 注册的映射,不仅在类之间,而且我需要知道当时是否映射了特定类中的特定属性,如果不是我需要映射它,如果是这样,我会忽略,但以一种或另一种方式,我需要将该属性的名称或完整路径保存为字符串。

例如:

1 - foo.bar(必须为“Foo”类保留属性“bar”) 2 - foo.Bar.Foo.Bar.Name(需要为“Foo”类存储完整路径“Bar.Foo.Bar.Name” ")

事实上,我可以做到这一点,但有一些特性可以从我的实现中逃脱。

到目前为止,包含我所做的方法的类位于 BitBucket 的存储库中: https ://bitbucket.org/Lunadie/telerikmvcgridcustombindinghelper/src/5e3b8301719d/TelerikMvcGridCustomBindingHelper/Mapper/GridModelMapperBase.cs

特别是“CanPassToAutoMapper”和“GetPropertyMap”这两个方法看起来有点脆弱,容易出错,你怎么看?

0 投票
1 回答
12797 浏览

entity-framework - 使用 OrElse 和 AndAlso 表达式方法的异常

我正在尝试以编程方式构建表达式树。

我的输入中有一个条件类列表,其格式如下:

当我构建对象时,我通过以下方式为每个条件Expression创建一个Expression

Filter.ToExpression() 方法是这样实现的

当我有一个条件时一切正常,但是当我尝试使用And, Or, AndAlso,OrElse静态方法之一组合表达式时,我收到一个InvalidOperationException说:

2[MyObject,System.Boolean]' and 'System.Func没有为类型“System.Func 2[MyObject,System.Boolean]”定义二元运算符 Or 。

我有点困惑。有人可以更好地解释异常的原因并提出解决方案吗?

非常感谢!

0 投票
2 回答
1073 浏览

vb.net - 带有 Linq to Entity 的 Linq 表达式

我试图在扩展方法中包装一些重复的代码,以清理一下。

我试图避免的模式是检查字符串(通常是控件的文本值)是否为空/空,如果是,则使用包含将其与我的数据中的字段进行比较。显然,该字段没有硬编码到我的扩展中,对象类型也没有。

我所拥有的在 Linq to Objects 中完美运行,但我收到通用运行时错误“LINQ to Entities 无法识别方法‘System.String Invoke(GenericQueryHelper.Customer)’方法,并且此方法无法翻译成商店表达。” 使用实体框架模型时。

这是我所拥有的:

我也试过:

以相同的结果...

首先,这可能吗?我希望我的用法看起来像这样:

我确实需要在 SQL 数据库上运行它,因为它正在过滤结果,所以我不想在内存中这样做。有人有什么想法吗?

0 投票
1 回答
1234 浏览

linq - Linq To 实体中的表达式树

我正在尝试创建一个扩展方法,该方法接受一个指向实体上的属性的表达式,以及一个将其与 using 进行比较的常量字符串,它String.Contains首先检查字符串是空还是空,并且仅在以下情况下应用过滤器字符串有一个值。这是我第一次涉足表达式树,所以我不太确定发生了什么,我现在有一个例外,我不知道如何治愈......

到目前为止,我在这里:

我这样称呼它,DbContext因为我有一个Customer带有FirstName字符串属性的实体:

例外是:

有什么想法吗?

0 投票
2 回答
3439 浏览

c# - LINQ 表达式创建具有不同对象类型的数组

我正在对用户输入进行一些解析,在这里我需要解析应该是特定类型的参数数组。

在解析的那一刻,我不知道每个参数应该是哪个类型,但它可以被评估为任何类型。所以,我决定将它们临时存储在一个对象数组中。但是当我尝试做这样的事情时:

我得到以下异常:“System.Int32”类型的表达式不能用于初始化“System.Object”类型的数组。

也就是说,我想,因为没有发生隐式装箱。所以我自己装箱:

到目前为止一切顺利:我得到了数组中各种类型的对象列表。

但是,当我最终获得所需的类型时,我尝试将所有值从上部数组转换为该类型(假设该类型通常是 int)我将其转换:

当 expr 实际上是字符串“aaaaa”时,这是两个命令的调试视图:

现在,这是我的问题:这不会引发异常。但它会在最终编译表达式时。我的意思是,字符串不是整数。

也许这真的不应该抛出异常,我不知道。但这对我不起作用。

有办法治愈吗?

编辑:代码如下所示:

0 投票
1 回答
1330 浏览

c# - 如何编写设置 Moq 对象期望的通用方法?

方法 M 采用 2 个参数,P1 和 P2。P2 是代表。我想告诉一个模拟对象,“每当使用参数 P1 调用方法 M 时,调用 P2 并将对象 O 传递给它。” 我正在使用起订量。

以下方法有效,但似乎有点冗长。

我想将最后一点重构为通用辅助方法,以便我(和未来的测试作者)只需要编写如下内容:

最大的问题是:该辅助方法中会包含什么?到目前为止,我已经取得了部分成功,但我想知道是否有任何方法可以做到这一点。

第一次尝试(无效)

我可以这样调用这个方法:

事实证明,Moq 不喜欢我传递给 Setup 方法的内容。它抛出一个异常,说“表达式不是方法调用”。

第二次尝试

在这种方法中,我对 LINQ 表达式进行了一些操作(我以前从未做过)。

这个方法可以这样调用。

这行得通,如果有必要,我可能会接受这样的事情。不幸的是,如果我不小心调用了错误的 DataCacheMock 方法(可能它有一个采用字符串而不是 int 的重载),那么我会得到一个运行时错误而不是编译时错误。

第三次尝试

此版本从您传递给它的表达式中获取模拟对象,因此您在调用辅助方法时不必两次提及模拟对象:

但是,这种方法仍然存在与类型相同的问题。

我(和未来的测试作者)可能会处理顶部提到的冗长语法,我们可能会处理较低的类型安全性,因为测试会失败。不过,我仍然想看看最小起订量是否可行;我已经在兔子洞里走了这么远。:-)

0 投票
4 回答
4431 浏览

c# - 将 lambda 表达式转换为用于缓存的唯一键

我看过与此类似的其他问题,但找不到任何可行的答案。

我一直在使用以下代码生成唯一键,用于将 linq 查询的结果存储到缓存中。

它似乎适用于包含整数或布尔值的简单查询,但是当我的查询包含嵌套的常量表达式时,例如

因此返回的键是:

(True AndAlso (Farm.Crops.Any(y => (value(OzFarmGuide.Controllers.FarmController+<>c__DisplayClassd).slug == y.Slug)) AndAlso (Farm.Deleted == False)))

如您所见,我通过的任何作物名称都会给出相同的关键结果。有没有办法可以提取给定参数的值,以便区分我的查询?

也将转换为y正确的类型名称会很好......

0 投票
2 回答
353 浏览

reflection - 使用 EF4.1 进行动态流利映射

我想动态创建我的数据模型来处理一些现有的类和一个自定义 XML 映射文件,因为我有很多现有的表和很多现有的业务类(我不知道可能很疯狂)。

对于使用不同列名或不对应于现有列的属性,我想调用 .Ignore() 和 .HasColumnName() 但我想动态地执行此操作。

所以我希望能够进行这样的调用,但我想根据反射和使用 Linq.Expressions 的 XML 配置文件动态地调用它们(我从来没有机会使用过):

或者

这就是我正在尝试的(最终我将参考我的 XML 映射来确定要映射哪些属性以及要忽略哪些属性):

但我的 lambda 表达式不正确:

0 投票
4 回答
10022 浏览

c# - 你如何制作一个包含对 Any() 的调用的 System.Linq.Expressions.Expression 对象

我想动态生成一个可以用作过滤器的 linq.expressions.expression 语句。

这是我想转换为表达式的示例 Linq 查询:

这是我的尝试

请协助。

0 投票
1 回答
2651 浏览

c# - 将 Linq 表达式传递给函数

我想将一个类的属性列表传递给一个函数。在基于属性列表的函数中,我将生成一个查询。与 Linq Select 方法中的功能完全相同。在这里,我将为 Ingress 数据库实现此功能。

举个例子,

在前端我想像这样运行一个选择,

我的实体类是这样的

我想像这样调用 Select 函数,

然后,使用结果我可以获得名称和地址属性的值。

我认为我的 Select 函数应该是这样的,

(*我认为这应该使用 Linq 表达式来完成。但我不确定输入参数和返回类型是什么。*)

这是尝试创建类似于 Linq 的功能。但我不是 Linq 表达式方面的专家。

麻省理工学院有一个名为DbLinq的项目,但它是一个大项目,我仍然无法从中获得任何帮助。

有人可以帮我开始这个吗,或者有人可以链接我一些有用的资源来阅读这个。