Tag: lambda

如何将类的属性作为方法的参数传递?

我有一个类,有十几个属性代表各种金融领域。 我有另一个类需要分别对每个字段执行一些计算。 这些计算方法中的代码是相同的,除了它进行计算的字段。 有没有办法可以将属性名称作为参数传递,只有一个方法可以执行所有执行工作而不是每个属性的12个方法? 此外,我确信这可以通过reflection来完成,但我已经在其他代码中看到lambda以同样的方式使用,并且想知道这是否是可以使用它的候选者。 根据要求,这是一个例子: public class FinancialInfo { public virtual DateTime AuditDate { get; set; } public virtual decimal ReleasedFederalAmount { get; set; } public virtual decimal ReleasedNonFederalAmount { get; set; } public virtual decimal ReleasedStateAmount { get; set; } public virtual decimal ReleasedLocalAmount { get; set; } public virtual decimal ReleasedPrivateAmount { […]

“LINQ不支持指定的类型成员’Date’”

_dbEntities.EmployeeAttendances.Where(x => x.DailyDate.Date.Equals(DateTime.Now.Date)).ToList(); “LINQ to Entities不支持指定的类型成员’Date’。仅支持初始值设定项,实体成员和实体导航属性。” 如何根据linq查询中的当前日期获取员工数据?

如何在List中存储代理

如何将委托(命名,匿名,lambda)存储在通用列表中? 基本上我正在尝试构建一个委托字典,从中我可以使用密钥访问存储的委托并执行它并按需返回值。 是否可以在C#4中完成? 有什么想法来完成它吗? 注意:异类列表更适合存储任何类型的委托。

使用Lambda表达式调用通用方法(以及仅在运行时已知的类型)

您可以使用Lambda表达式对象将lambda表示为表达式。 如果在运行时只知道用于generics方法签名的类型,如何创建表示generics方法调用的Lambda表达式对象 ? 例如: 我想创建一个Lambda表达式对象来调用: public static TSource Last( this IEnumerable source ) 但我只知道TSource在运行时是什么。

如何在运行时在IEnumerable 上创建动态多属性Select?

我昨天问了一个非常相似的问题 ,但直到今天我才意识到我接受的答案并没有解决我所有的问题。 我有以下代码: public Expression<Func> SelectExpression(string fieldName) { var param = Expression.Parameter(typeof(TItem), “item”); var field = Expression.Property(param, fieldName); return Expression.Lambda<Func>(field, new ParameterExpression[] { param }); } 使用如下: string primaryKey = _map.GetPrimaryKeys(typeof(TOriginator)).Single(); var primaryKeyExpression = SelectExpression(primaryKey); var primaryKeyResults = query.Select(primaryKeyExpression).ToList(); 这允许我从IQueryable提取主键。 问题是这段代码只适用于一个主键,我需要添加对多个PK的支持。 那么,有什么方法可以调整上面的SelectExpression方法来获取IEnumerable (这是我的主键属性名列表)并让方法返回一个选择这些键的表达式? 即给出以下内容: var knownRuntimePrimaryKeys = new string[] { “CustomerId”, “OrderId” }` 我的选择需要执行以下操作(在运行时): var […]

C#中的lambda如何绑定到foreach中的枚举器?

我刚刚遇到了最意想不到的行为。 我确信这有一个很好的理由。 有人可以帮忙解释一下吗? 考虑以下代码: var nums = new int[] { 1, 2, 3, 4 }; var actions = new List<Func>(); foreach (var num in nums) { actions.Add(() => num); } foreach (var num in nums) { var x = num; actions.Add(() => x); } foreach (var action in actions) { Debug.Write(action() + ” “); } […]

基于子实体的属性构建OrderBy Lambda表达式

我正在尝试使用lambda表达式生成LINQ OrderBy子句,其中实体的列名称作为字符串的输入(在下面的“sortOn”变量中)。 下面的代码适用于sortOn值,如生成lambda的“Code” p => p.Code 但我还想对lambda可能存在的子实体进行排序 p => p.Category.Description 所以在这个例子中,我只想设置sortOn =“Category.Description”并生成正确的lamdba表达式。 这可能吗? 有关最佳方法的任何建议都会受到欢迎。 此代码适用于简单的情况: var param = Expression.Parameter(typeof (Product), “p”); var sortExpression = Expression.Lambda<Func>( Expression.Property(param, sortOn), param); if (sortAscending ?? true) { products = products.OrderBy(sortExpression); } else { products = products.OrderByDescending(sortExpression); } 此问题的用例是显示数据网格并能够对数据进行排序,只需将要排序的列名称传递回服务器即可。 我想使解决方案通用,但现在已开始使用特定类型(示例中的产品)。

将’Set Next Statement’强制为’if’块时CLR System.NullReferenceException

背景 我接受这不是在正常的代码执行期间可能发生的事情,但我在调试时发现它并认为分享有趣。 我认为这是由JIT编译器引起的,但欢迎任何进一步的想法。 我使用VS2013复制了针对4.5和4.5.1框架的此问题: 建立 要查看此Common Language Runtime Exceptions必须启用Common Language Runtime Exceptions : DEBUG > Exceptions… 我已将问题的原因提炼到以下示例: using System.Collections.Generic; using System.Linq; namespace ConsoleApplication6 { public class Program { static void Main() { var myEnum = MyEnum.Good; var list = new List { new MyData{ Id = 1, Code = “1”}, new MyData{ Id = 2, […]

构建动态表达式树以过滤集合属性

我正在尝试构建一个lambda表达式,它将与其他表达式组合成一个相当大的表达式树进行过滤。 这工作正常,直到我需要通过子集合属性进行过滤。 如何构建一个Lambda表达式,它将在集合的属性上使用Any()进行过滤,该集合属性是根对象的属性? 例: CurrentDataSource.Offices.Where(o => o.base_Trades.Any(t => t.Name == “test”)) 这是我如何静态构建表达式,但我需要动态构建它。 对困惑感到抱歉。 编辑:这是我如何处理不太复杂的表达式的片段: IQueryable officeQuery = CurrentDataSource.Offices.AsQueryable(); ParameterExpression pe = Expression.Parameter(typeof(Office), “Office”); ParameterExpression tpe = Expression.Parameter(typeof(Trades), “Trades”); Expression SimpleWhere = null; Expression ComplexWhere = null; foreach (ServerSideFilterObject fo in ssfo) { SimpleWhere = null; foreach (String value in fo.FilterValues) { if (!CollectionProperties.Contains(fo.PropertyName)) { //Handle […]

如何为运行时排序创建表达式树?

使用Entity Framework 4,我试图基于成员名称的集合实现动态排序。 基本上,用户可以选择要排序的字段和排序顺序。 我看过表达式树的例子,不能把它拼凑起来。 以下是一些细节: 列名集合: public List sortColumns; sortColumns = new List(); /// Example subset of video fields. The collection will vary. sortColumns.Add(“Width”); sortColumns.Add(“Height”); sortColumns.Add(“Duration”); sortColumns.Add(“Title”); video类定义如下: public class Video { public string Title { get; set; } public int Width { get; set; } public int Height { get; set; } public […]