问题标签 [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 投票
7 回答
1787 浏览

c# - 在运行时使用 C# 合并两个对象的最佳方法是什么?

我有两个对象,我想合并它们:

创造:

我只会在运行时知道 Foo 的结构。Bar 在运行时可以是任何类型。我想要一个方法,它将被赋予一个类型,并将该类型与 Foo 结合起来。例如,在上面的场景中,该方法在运行时被赋予了一个 Bar 类型,我将它与 Foo 结合起来。

最好的方法是什么?可以使用 LINQ 表达式来完成,还是我必须动态生成它,还是有其他方法?我仍在学习 C# 3.0 中的新 LINQ 命名空间,如果无法使用 LINQ 表达式完成,请原谅我的无知。这也是我第一次不得不用 C# 做这样的动态事情,所以我不太确定我可以使用的所有选项。

感谢您提供的任何选项。

编辑


这严格用于将元信息添加到给我序列化的类型。这种情况使用户的对象在序列化之前不知道需要添加的元信息。在问这个问题之前,我想出了两个选项,我只是想看看是否还有,然后再决定使用哪一个。

我想出的两个选择是:

通过添加元信息来操作序列化后给我的类型的序列化字符串。

包装给我的类型,这类似于@Zxpro 提到的,但我的略有不同,这很好。它只会让我的 API 的用户必须遵循约定,这不是一件坏事,因为每个人都在讨论约定而不是配置:

编辑


谢谢大家的回答。我决定像上面一样包装对象,并给@Zxpro 提供了答案,因为大多数人也喜欢这种方法。

如果其他人遇到这个问题,请随时发布,如果您认为可能有更好的方法。

0 投票
4 回答
2599 浏览

c# - 如何使用反射找到特定的泛型重载?

我正在尝试创建一个Expression将调用特定泛型重载方法的方法(Enumerable.Average在我的第一个测试用例中)。但是,直到运行时才知道特定的类型绑定,因此我需要使用它Reflection来查找并创建正确的泛型方法(Expression从解析的文本中创建)。

因此,如果我在运行时知道我想找到这个特定的重载:

如何MethodInfo使用反射解决这个问题?

到目前为止,我有以下选择声明:

以上将其缩小为三个重载,但我想反映并找到需要Func<TSource, int>where的特定重载argType == typeof(int)

我很难过,任何帮助表示赞赏。

0 投票
2 回答
753 浏览

linq - Linq to Nhibernate 查询的 Where(...) 子句中的函数调用是否会对性能产生负面影响?

我在我正在构建的应用程序中使用 linq 休眠和 IQueryable.Where 函数。Expression让我感到困惑的是,我创建并传递给 INhibernateQueryable 的 Where 函数的 s是如何影响性能的。

在性能方面,我不太确定在编写这些查询表达式时应该避免哪些问题。如果我通过如下函数调用传入一个表达式:

是否要检索每条记录where IsBuyOrder = true,然后CheckVariousProperties在延迟执行不再延迟后立即调用它们的函数?

函数调用如何影响 LinqToNhibernate 性能?

在 LINQ to Nhibernate 查询表达式中应该避免哪些事情?

0 投票
4 回答
236 浏览

c# - LINQ - 最小化返回的记录 - 编写这些表达式的正确方法

Employee 是一个示例实体类型。

这些会拉回整个记录(对象)然后过滤吗?编写这些以使整行成为 LINQ 表达式的最佳方法是什么?

0 投票
2 回答
1586 浏览

.net - WhereNot linq 表达式

我正在尝试创建一个扩展“WhereNot”

所以我可以使用:

请注意,我的目标是学习 linq 表达式;不能解决我的问题。

我创建了这个功能:

我不知道如何切换布尔标志,函数 Negate 会做吗?

欢迎使用 vb.net 和 C# 中的答案

0 投票
2 回答
4729 浏览

c# - 如何编写 Linq 表达式?即功能>, 经验>, 经验>>

我正在创建一个Validator<T>类。我正在尝试SelectMany为我的验证器实现 Linq 扩展方法,以便能够使用 Linq 查询编写表达式并验证最终结果,即使基础值发生变化也是如此。

以下测试代码展示了我的意图。

我已经看到了以下问题How do I compose existing Linq Expressions,它向我展示了如何Func<T, bool>使用表达式将两个 组合在一起And,但我需要能够以更有效的方式组合函数。

例如,我有以下两个表达式:

我希望创建一个像这样的新表达式:

更简洁地说,我正在尝试创建这些功能:

可以修改通用 case 函数以根据需要接受不同数量的通用参数来组成任何函数。

我已经搜索了 Stack Overflow(当然)和网络,但没有一个解决这个问题的例子。

我的Validator<T>课程代码如下。

我的SelectMany扩展包含大量.Compile().Invoke()我想摆脱的令人讨厌的东西。

提前致谢!

0 投票
3 回答
2100 浏览

c# - 如何发出 System.Linq.Expression?

我有一些代码可以使用等生成各种委托Func<>。我希望能够将生成的函数序列化为程序集以供以后使用。过去我用 System.Reflection.Emit 做了一些事情,但现在 Linq 表达式我不想再走那条路了。System.Linq.ExpressionsExpression.Lambda<Func<>>.Compile()

Expressions是否有一种机制可以序列化已编译的表达式或从命名空间到命名空间的某种桥梁Emit

编辑

背景的一些背景:我正在研究一个查询引擎(主要是为了我自己的启发和享受)。给定一条 SQL 语句,我想将其解析并转换为 lambda 函数,然后将其序列化到磁盘以供以后(并重复执行)。

在伪代码中,我到了这一点:

(其中fieldfield1field2T 类型的属性,ABT1 类型的属性。我可以传递<T>toquery和 get 的任何枚举,并且它的枚举<T1>与查询条件匹配。

所以我想query作为一个已经编译的程序集序列化到磁盘,以便以后我可以加载它并评估不同的集合,<T>而无需解析和编译它。我正在描绘以下内容:

0 投票
2 回答
8615 浏览

linq - LINQ 表达式> .Contains() 的等价物

有没有人知道如何使用 Linq 表达式创建一个 .Contains(string) 函数,甚至创建一个谓词来完成这个

与此类似的东西是理想的吗?

0 投票
2 回答
2030 浏览

c# - 是否应该测试/模拟包含 LINQ 表达式的方法?

假设我有一个带有将 System.Linq.Expressions.Expression 作为参数的方法的类,那么在单元测试中有多少价值?

单元测试或模拟这些方法对我来说是一次令人兴奋的经历,我现在不得不怀疑这一切是否不值得。

我将如何使用一些任意表达式对这种方法进行单元测试,例如

0 投票
1 回答
6368 浏览

c# - 如何使用 Linq 表达式访问字典项

我想使用 Linq 表达式构建一个 Lambda 表达式,该表达式能够使用字符串索引访问“属性包”样式字典中的项目。我正在使用.Net 4。

在上面的测试方法中,我想将 Dictionary 项目的值,即 testBag["one"] 分配到结果中。请注意,我已将传入的 Key 字符串分配到结果中以演示 Assign 调用。