相关疑难解决方法(0)

从Expression <Func <TModel,TProperty >>获取属性,作为字符串

我使用了一些强类型表达式,这些表达式被序列化以允许我的UI代码具有强类型排序和搜索表达式.这些是类型的Expression<Func<TModel,TProperty>>并且如此使用:SortOption.Field = (p => p.FirstName);.对于这个简单的案例,我已经完美地完成了这项工作.

我用来解析"FirstName"属性的代码实际上重用了我们使用的第三方产品中的一些现有功能,并且它工作得很好,直到我们开始使用深层嵌套的属性(SortOption.Field = (p => p.Address.State.Abbreviation);).此代码在支持深层嵌套属性的需求方面有一些非常不同的假设.

至于这段代码的作用,我并不是真的理解它而不是改变代码,我想我应该从头开始编写这个功能.但是,我不知道这样做的方法.我怀疑我们可以做一些比做ToString()和执行字符串解析更好的事情.那么有什么好办法来处理琐碎和深层嵌套的案例呢?

要求:

  • 鉴于表达式p => p.FirstName我需要一串"FirstName".
  • 鉴于表达式p => p.Address.State.Abbreviation我需要一串"Address.State.Abbreviation"

虽然对我的问题的答案并不重要,但我怀疑我的序列化/反序列化代码对将来发现这个问题的其他人有用,所以它在下面.同样,这段代码对这个问题并不重要 - 我只是觉得它可能对某些人有所帮助.请注意,DynamicExpression.ParseLambda它来自动态LINQ的东西,Property.PropertyToString()这是这个问题的关键.

/// <summary>
/// This defines a framework to pass, across serialized tiers, sorting logic to be performed.
/// </summary>
/// <typeparam name="TModel">This is the object type that you are filtering.</typeparam>
/// <typeparam name="TProperty">This is the property on the …
Run Code Online (Sandbox Code Playgroud)

c# lambda

53
推荐指数
4
解决办法
3万
查看次数

从 TypeScript 中的 lambda 表达式中检索属性名称

我想强输入属性名称

myMethod(model => model.userId);

public myMethod(model: () => any) {
    //Must print "userId"
}
Run Code Online (Sandbox Code Playgroud)

我已经知道这行不通,因为 JavaScript 会评估 userId。

在 C# 中很容易做到:

从表达式中获取字符串属性名称

从 lambda 表达式中检索属性名称

是否可以在 TypeScript/JavaScript 中做到这一点?

javascript typescript

8
推荐指数
2
解决办法
2395
查看次数

标签 统计

c# ×1

javascript ×1

lambda ×1

typescript ×1