Tag: lambda

Func 方法参数的首选命名约定是什么?

我承认这个问题是主观的,但我对社区的看法很感兴趣。 我有一个缓存类,它接受类型为Func的缓存加载器函数,它用于从数据库中检索值并将其存储在缓存中。 public static class Cache { public TResult Get(string cacheKey, Func cacheLoader) { // Implementation } } 我的问题是: 我应该如何命名函数参数? 我应该将它命名为对象,例如cacheLoader吗? 我应该将其命名为方法,例如loadResult ? 我应该将它明确地称为函数,例如cacheLoadFunction吗? (我不喜欢这个。) 我对我应该命名这个特定的函数参数不感兴趣,并且对如何命名函数参数更感兴趣。 什么说你,Stack Overflow社区?

返回嵌套的通用表达式<Func >

错误消息“无法找到类型或命名空间名称’T’。” ??? public static Expression<Func> MakeFilter(string prop, object val) { ParameterExpression pe = Expression.Parameter(typeof(T), “p”); PropertyInfo pi = typeof(T).GetProperty(prop); MemberExpression me = Expression.MakeMemberAccess(pe, pi); ConstantExpression ce = Expression.Constant(val); BinaryExpression be = Expression.Equal(me, ce); return Expression.Lambda<Func>(be, pe); } 相关链接: 使用reflection来解决Linqed属性 http://social.msdn.microsoft.com/forums/en-US/linqprojectgeneral/thread/df9dba6e-4615-478d-9d8a-9fd80c941ea2/ 通用Func 的运行时创建

构建动态表达式树时出现问题

我正在尝试构建一个动态表达式树,如下所示: Func<IEnumerable, int, bool> dividesectionmethod = (x, y) => { int nos1 = 0; int nos2 = 0; foreach (int i in x) { if (i nos2; }; 为此我正在使用: ParameterExpression enumerableExpression = Expression.Parameter(typeof(IEnumerable), “x”); ParameterExpression intexpression = Expression.Parameter(typeof(int), “y”); ParameterExpression localvarnos1 = Expression.Variable(typeof(int), “nos1”); ParameterExpression localvarnos2 = Expression.Variable(typeof(int), “nos2”); ConstantExpression zeroConstantintval = Expression.Constant(0); BinaryExpression bexplocalnos1 […]

如何处理作为参数传递给方法的Lambda表达式 – C#.NET 3.5

我对Lambda表达式的了解有点不稳定,而我可以编写使用Lambda表达式(又名LINQ)的代码,我正在尝试编写自己的方法,该方法接受一些Lambda Expression类型的参数。 背景:我正在尝试编写一个方法,从字面上的任何其他对象类型返回TreeItem类型的对象的树集合。 到目前为止我有以下内容: public class TreeItem { public string Id { get; set; } public string Text { get; set; } public TreeItem Parent { get; protected set; } public IList Children { get { // Implementation that returns custom TreeItemCollection type } } public static IList GetTreeFromObject(IList items, Expression<Func> id, Expression<Func> text, Expression<Func<T, […]

自定义在lambda中相交

我想知道使用lambda表达式是否可以解决这个问题: List listOne = service.GetListOne(); List listTwo = service.GetListTwo(); List result = new List(); foreach(var one in listOne) { foreach(var two in listTwo) { if((one.Id == two.Id) && one.someKey != two.someKey) result.Add(one); } }

如何将LambdaExpression转换为类型化表达式<Func >

我正在为nHibernate动态构建linq查询。 由于依赖关系,我想在以后转换/检索键入的表达式,但到目前为止我还没有成功。 这不起作用(演员应该发生在其他地方): var funcType = typeof (Func).MakeGenericType(entityType, typeof (bool)); var typedExpression = (Func)Expression.Lambda(funcType, itemPredicate, parameter); //Fails 这是有效的: var typedExpression = Expression.Lambda<Func>(itemPredicate, parameter); 是否有可能从LambdaExpression获取’封装’类型表达式?

使用委托和Lambda的奇怪行为

作为在我正在开发的库中引入延迟格式化评估的一种方法,我已经定义了委托 public delegate string MessageFormatterDelegate(string message, params object[] arguments); public delegate string MessageFormatterCallback(MessageFormatterDelegate formatterDelegate); 以及下一课的内容 public static class TestClass { public static string Evaluate(MessageFormatterCallback formatterCallback) { return (formatterCallback(String.Format)); } } 但是,这表现得非常奇怪:从外部项目运行时,语句 Console.WriteLine(TestClass.Evaluate(message => message(“{0},{1},{2}”, 1, 2, 3))); 不编译,失败并出现错误 Error 1 Delegate ‘MessageFormatterDelegate’ does not take 4 arguments 而 Console.WriteLine(TestClass.Evaluate((MessageFormatterDelegate message) => message(“{0},{1},{2}”, 1, 2, 3))); […]

更改LambdaExpression中的参数名称仅用于显示

假设我有一个这样的表达式: Expression<Predicate> exp 如果我分配以下表达式: a => a.First() != 0 然后我调用exp.ToString()我将获得我传递的表达式,这是非常好的,但是,假设我们想要用其他东西更改我们用于’a’的名称,我们该怎么办? 字符串替换在所有情况下都不会起作用(它在上面的示例中起作用,但是如果参数例如被称为’i’怎么办?)是否可以只更改参数名称,运行时间,而不影响表达式语义? 更新 @PhilKlein工作得很好,但需要框架4.但是如果我们需要定位框架3.5,我们可以使用Matt Warren的ExpressionVisitor类,只需修改从protected到public的Visit方法。

.NET中的lambda表达式和谓词有什么区别?

.NET中的lambda表达式和谓词有什么区别?

Dapper.NET和IQueryable

是否有计划使Dapper.net与IQueryable接口兼容? 如果没有,将Dapper与“表达式树”filter一起使用的解决方法是什么?