Tag: lambda

ASP.NET MVC3 WebGrid格式:参数

我试图在ASP.NET MVC3中使用新的WebGrid,并且我希望显示一组链接图标,执行各种操作(编辑,查看,删除)……为此,我有一个HtmlHelper扩展,基本上输出HTML: 扩展返回MvcHtmlString,它在Razor视图中单独使用时工作正常.Eg:@ Html.ActionLinkIconForEditAction(“Customer”,2) 问题是我需要在传递对象的ID时在WebGrid列中调用此帮助程序(每个操作一次)。 我难以理解的问题是编译器给我一个错误,说它无法将MvcHtmlString(或’lambda expression’取决于我尝试的调用)转换为格式预期的System.Func … 例如,这有效: grid.Column(header: “”, format: @@Html.ActionLinkIconForEditAction(“Customer”, 2)) 但这不是: grid.Column(header: “”, format: (customer) => @@Html.ActionLinkIconForEditAction(“Customer”, customer.Id)) grid.Column(header: “”, format: (customer) => Html.ActionLinkIconForEditAction(“Customer”, customer.Id)) 我明白了: Error 4 Argument 3: cannot convert from ‘lambda expression’ to ‘System.Func’ 或者这个电话: grid.Column(header: “”, format: Html.ActionLinkIconForEditAction(“Customer”, customer.Id)), 我明白了: Error 5 Argument 3: cannot convert from […]

为什么匿名委托可以省略参数,但lambdas不能?

//ok Action CallbackWithParam1 = delegate { }; //error CS1593: Delegate ‘System.Action’ does not take 0 arguments Action CallbackWithParam2 = () => { }; 只是想知道为什么差异真的。 : – /

将Func 强制转换为Func 的更快方法?

有没有更快的方法将Fun为Func public static class StaticAccessors { public static Func TypedGetPropertyFn(PropertyInfo pi) { var mi = pi.GetGetMethod(); return (Func)Delegate.CreateDelegate(typeof(Func), mi); } public static Func ValueUnTypedGetPropertyTypeFn(PropertyInfo pi) { var mi = typeof(StaticAccessors).GetMethod(“TypedGetPropertyFn”); var genericMi = mi.MakeGenericMethod(pi.PropertyType); var typedGetPropertyFn = (Delegate)genericMi.Invoke(null, new[] { pi }); //slow: lambda includes a reflection call return x => typedGetPropertyFn.Method.Invoke(x, new object[] { […]

C#声明lambda表达式中的变量

我想做一个像这样的简单lambda表达式: IList list = GetSomeList(); MyEntity1 result = list.SingleOrDefault( e => GetMyEntity2(e) != null && GetMyEntity2(e).Id != null && GetMyEntity2(e).Id > 0 ); 这很好用,但从MyEntity1获取MyEntity2并不是那么简单,所以我想在lambda表达式中声明一个变量来保存MyEntity2并使用它,而不是一次又一次地调用GetMyEntity2方法。 那可能吗? 注意:代码只是反映我的实际案例的一个例子。 谢谢!

结束BeginInvoke的正确方法是什么?

我最近在MSDN上阅读了这个post 。 所以我想使用lambda表达式作为一种调用EndInvoke的方式,只是为了确保一切都很好和整洁。 哪个更正确? 例1: Action method = DoSomething; method.BeginInvoke(5, (a)=>{method.EndInvoke(a);}, null); 例2: Action method = DoSomething; method.BeginInvoke(5, (a)=> { Action m = a.AsyncState as Action; m.EndInvoke(a); }, method);

子集合的表达式列表 .Any

我正在使用表达式树构建genericslinq查询。 在子集合上创建表达式时,我陷入困境。 由于类型不兼容,方法调用会爆炸。 通常我知道要放在那里,但Any()方法调用让我感到困惑。 我尝试了所有我能想到的类型而且没有运气。 任何帮助,将不胜感激。 这是我的实体类: public class Story : Entity { public string Author { get; set; } public IList Contributors { get; set; } } 我要生成表达式树的查询: var stories = new List(); stories.Where(p => p.Author.Contains(“Test”) || p.Contributors.Any(c => c.Contains(“Test”))); 到目前为止我得到了什么 public interface IFilterCriteria { string PropertyToCompare { get; set; } object ValueToCompare { […]

运算符’=>’在C#中意味着什么?

这句话中的’=>表示什么? del = new SomeDelegate(() => SomeAction()); 以上声明是否与此相同? del = new SomeDelegate(this.SomeAction); 谢谢。

使用c#lambda的n个数的阶乘…?

我刚开始玩lambdas和Linq表达自学。 我为此采取了简单的因子问题。 在一个复杂的小场景中,找到给定n个数的阶乘(无法使用递归循环)。 在我试过的代码下面。 但这不起作用。 public void FindFactorial(int range) { var res = Enumerable.Range(1, range).Select(x => Enumerable.Range(0, x).Where(y => (y > 1)).Select(y => y * (y-1))); foreach (var outt in res) Console.WriteLine(outt.ToString()); } 这是我使用的程序 循环数字1到n – Enumerable.Range(1,range)。 选择每个数字x并再次循环它们x次(而不是递归) 并选择其中(y =>(y> 1))大于1的数字并将其与(y-1)相乘 我知道我搞砸了某个地方。 谁能告诉我什么是错的以及任何其他可能的解决方案。 编辑: 我打算让这个线程打开一段时间……因为这是我迈向lambda的最初步骤..我发现所有答案都非常有用且信息丰富..而且它会变得有趣而且很好学习看到不同的接近方式这个问题。

使用多个字段构建GroupBy表达式树

要动态生成GroupBy表达式,我正在尝试构建Linq表达式树。 要分组的字段是动态的,可以在数量上有所不同。 我用这个代码: string[] fields = {“Name”, “Test_Result”}; Type studentType = typeof(Student); var itemParam = Expression.Parameter(studentType, “x”); var addMethod = typeof(Dictionary).GetMethod( “Add”, new[] { typeof(string), typeof(object) }); var selector = Expression.ListInit( Expression.New(typeof(Dictionary)), fields.Select(field => Expression.ElementInit(addMethod, Expression.Constant(field), Expression.Convert( Expression.PropertyOrField(itemParam, field), typeof(object) ) ))); var lambda = Expression.Lambda<Func<Student, Dictionary>>( selector, itemParam); 代码是从这篇文章复制而来的 (谢谢Mark Gravel!)。 最终确定…… var currentItemFields […]

C#lambda查询使用generics类型

我有三个class,他们都有财产日期。 我想写一个generics类来返回一个日期的所有记录。 现在的问题是:如何使用generics类型T编写lambda表达式? 代码简单如下(我不会编译,因为“r.Date”不起作用,但它是我想要实现的效果) Class GenericService: IGenericService where T:class { … readonly IGenericRepository _genericRepository; public IEnumerable GetRecordList(DateTime date) { var query=_genericRepository.FindBy(r=>r.Date=date); } 谢谢你的帮助! 此致,Léona