相关疑难解决方法(0)

如何将String转换为其等效的LINQ表达式树?

这是原始问题的简化版本.

我有一个名为Person的类:

public class Person {
  public string Name { get; set; }
  public int Age { get; set; }
  public int Weight { get; set; }
  public DateTime FavouriteDay { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

......然后说一个例子:

var bob = new Person {
  Name = "Bob",
  Age = 30,
  Weight = 213,
  FavouriteDay = '1/1/2000'
}
Run Code Online (Sandbox Code Playgroud)

我想在我最喜欢的文本编辑器中将以下内容写成字符串 ....

(Person.Age > 3 AND Person.Weight > 50) OR Person.Age < 3
Run Code Online (Sandbox Code Playgroud)

我想取这个字符串和我的对象实例并评估一个TRUE或FALSE - 即在对象实例上评估一个Func <Person,bool>.

这是我目前的想法:

  1. 在ANTLR中实现基本语法以支持基本比较和逻辑运算符.我想在这里复制Visual Basic优先级和一些功能集:http://msdn.microsoft.com/en-us/library/fw84t893(VS.80).aspx
  2. 让ANTLR从提供的字符串中创建合适的AST. …

c# dsl lambda antlr predicate

164
推荐指数
4
解决办法
8万
查看次数

VBA数组排序功能?

我正在为VBA中的数组寻找合适的排序实现.Quicksort将是首选.或任何其他排序算法除了冒泡或合并之外的就足够了.

请注意,这是为了与MS Project 2003一起使用,因此应避免使用任何Excel本机函数和任何.net相关的函数.

arrays sorting vb6 vba ms-project

79
推荐指数
6
解决办法
24万
查看次数

如何在Visual Basic中实现类构造函数?

我只想知道如何用这种语言实现类构造函数.

vb.net

50
推荐指数
3
解决办法
9万
查看次数

Linq Dynamic ParseLambda没有解决

我正在尝试使用我在这里找到的示例代码来处理我正在处理的事情: 如何将String转换为其等效的LINQ表达式树?

在解决方案中,作者使用以下内容:

var e = DynamicExpression.ParseLambda(new[] { p }, null, exp);
Run Code Online (Sandbox Code Playgroud)

但是,每当我尝试使用它时,它都无法解决.我收到一个错误:

System.Linq.Expressions.DynamicExpression'不包含'ParseLambda'的定义

我在项目中安装了System Linq Dynamic nuget包,我还添加了一个using语句:

using System.Linq.Dynamic;
Run Code Online (Sandbox Code Playgroud)

然而,这看起来是灰色的所以我猜它没有发现我所指的DynamicExpression对象来自那里,而是从System.Linq.Expression中取而代之.有没有办法来解决这个问题?我试过去做

System.Linq.Dynamic.ParseLambda(new[] { p }, null, tagCondition);
Run Code Online (Sandbox Code Playgroud)

但仍然没有好,相同的错误和使用声明仍然是灰色的.

c# linq asp.net

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

如何在C#/ .NET中使用LINQ表达式树调用lambda

我想使用表达式树动态创建一个方法来调用lambda.第一次调用ComposeLambda函数时,以下代码运行正常,但第二次调用失败,并显示以下错误消息.

为调用方法'Int32 lambda_method(System.Runtime.CompilerServices.Closure,Int32)提供的参数数量不正确

{
    Func<int, int> innerLambda = i => i + 1;    
    var composedLambda = ComposeLambda(innerLambda);
    Console.WriteLine(composedLambda.DynamicInvoke(0));
    var composedLambda2 = ComposeLambda(composedLambda);
    Console.WriteLine(composedLambda2.DynamicInvoke(0));
}

private static Delegate ComposeLambda(Delegate innerLambda)
{
    Func<int, int> outerLambda = i => i + 2;
    var parameter = Expression.Parameter(typeof (int));
    var callInner = Expression.Call(innerLambda.GetMethodInfo(), parameter);
    var callOuter = Expression.Call(outerLambda.GetMethodInfo(), callInner);
    var composedLambdaType = typeof (Func<,>).MakeGenericType(typeof (int), typeof (int));
    var composedLambdaExpression = Expression.Lambda(composedLambdaType, callOuter, parameter);
    var composedLambda = composedLambdaExpression.Compile();
    return composedLambda;
}
Run Code Online (Sandbox Code Playgroud)

如何获取并传递此闭包对象?

.net c# linq lambda expression-trees

3
推荐指数
1
解决办法
4030
查看次数

标签 统计

c# ×3

lambda ×2

linq ×2

.net ×1

antlr ×1

arrays ×1

asp.net ×1

dsl ×1

expression-trees ×1

ms-project ×1

predicate ×1

sorting ×1

vb.net ×1

vb6 ×1

vba ×1