Tag: lambda

将List.Contains转换为表达式树

相关: 使用3个条件创建Lambda表达式 转换包含到表达式树 在我上一个问题的下面,我遇到了这个查询,我想编写Expression Tree版本: List lst = new List{1,2}; from a in myTbl where a.Age = 20 && lst.Contains(a.Status) select a 我写这段代码: List lst = new List{1,2}; var param = Expression.Parameter(typeof(T), “o”); var body = Expression.AndAlso( Expression.Equal( Expression.PropertyOrField(param, “Age”), Expression.Constant(20) ), Expression.Call(Expression.PropertyOrField(param, “Status”), “Contains”, Type.EmptyTypes, Expression.Constant(lst))); var lambda = Expression.Lambda<Func>(body, param); return lambda; 我收到错误: […]

代表和谓词查询

我正在学习lambdas,而我正在努力理解为什么,同时拥有EmployeeFilterAge类,如下所示: public class EmployeeFilterAge { int _age; public EmployeeFilterAge(int age) { _age = age; } public bool OlderThan(Employee employee) { return employee._age > _age; } } 当我想要这样做时: var filterByAge = new EmployeeFilterAge(29); var del = new AgeExclusion(filterByAge.OlderThan); 我得到一个错误,说“没有重载方法…匹配委托…”,而委托看起来像这样: public delegate bool AgeExclusion(object person); 这是因为它是一个谓词吗?

c#收集checkbox.Click事件供以后使用

我能够修改我提出的另一个问题提供的代码 c#根据按钮单击删除动态创建的复选框 足以让按钮点击和文件更新,但我陷入困境,如果有人愿意,可以使用更多的帮助。 我所拥有的代码目前是通过单击EventHandler从动态创建的复选框触发的。 chkPerm[i].Click += new EventHandler(checkChangedPerm); 当我调用checkChangedPerm()时,我的复选框被读取,名称被修剪并格式化,结果放入一个字符串中,以便以后写入Permissions.txt文件。 checkbox.Name是用户名+文件名的修剪部分。 在下面的代码中,我修改了之前添加的部分,以便在文件中找到正确的用户名。 public static void checkChangedPerm(Object sender, EventArgs e) { CheckBox c = sender as CheckBox; if (c.Name != null && c.Name != “”) { StreamReader reader; int count = c.Name.Count(); string trimmed = c.Name.ToString(); string outPut = trimmed.Remove(count – 4); using (reader = new StreamReader(dataFolder […]

将语法更改为Linq to SQL lambda join

我想将我的linq语句从查询语法切换到lambda,对我来说,最难理解的是lambda join from ru in db.rpm_usr join ei in db.emp_info on ru.wwid equals ei.wwid 所以上面的查询连接语法很简单,但是当我尝试将它放入lambda时 这不适合我 .Join(Rpm_scrty_emp_info, p => p.Iact_ind, j => j.Wwid 完整查询: var queryAllUsers = (from ru in db.rpm_usr join ei in db.emp_info on ru.wwid equals ei.wwid let cdis_eml = ei.dmn_addr + “;” where ru.inact_ind == “N” && ei.inact_ind == “N” && ei.dmn_addr […]

Linq获取比姓氏更高的项目

问候 我正在尝试找到一种方法,使用Linq-to-SQL来获取前15个记录,这些记录的姓氏更高,然后是“Jan”。 当我在SQL中使用它时,我得到的每个成员姓氏以字母顺序高于“Jan”的任何字母开头。 但是使用query.Where(m=>m.LastName > “Jan”)并不会令人遗憾。 谁知道我怎么能做到这一点?

使用Expression.AndAlso()在C#中分割表达式会导致exception

在我用C#编写的项目中,我发现了一个在linq的这个方法中使用的巨大谓词: public static IQueryable Where(this IQueryable source, Expression<Func> predicate); 这个谓词运作得很完美,但它在很多条件下我在理解它之前经常挣扎。 我想让它变得可读。 所以我写了几个表达式。 但我有一个像这样的运行时exception: 可怕的“参数未绑定在指定的LINQ to Entities查询表达式”exception 我想尝试答案,但我仍然不明白为什么参数(c)是一个问题,请参阅: // in a method Func<string, Expression<Func>> expr1 = (query) => return (c) => … ; Func<string, Expression<Func>> expr2 = (query) => return (c) => … ; var expr = Expression.AndAlso(expr1(“a string”).Body, expr2(“same string”).Body); return Expression.Lambda<Func>(expr , expr1(“a string”).Parameters[0]); […]

动态创建lambdas表达式+ linq + OrderByDescending

如何创建一个动态lambda表达式来传递给我在linq里面的orderby函数中使用? 我基本上想要转换queryResults.OrderByDescending(); 在queryResults.OrderByDescending(myCustomGeneratedLambdaExp); 其中myCustomGeneratedLambdaExp应为包含x => x.name的字符串。 谢谢

使用Lambda删除重复项

我需要一些帮助,使用lambda表达式删除我的Entity Framework上下文中的重复条目。 我有一个包含以下列的表: Id, DateOfIncident, Description, EmployeeId, IncidentTypeId, and IsAttendanceIncident 我想删除DateOfIncident, EmployeeID, IncidentTypeID and IsAttendanceIncident are the same.重复条目DateOfIncident, EmployeeID, IncidentTypeID and IsAttendanceIncident are the same. 我确实希望保留一个条目。 我知道如何在SQL中使用带有CTE的存储过程来完成此操作,但我无法弄清楚如何使用Lambda表达式完成此任务。 此代码返回一个不包括我的重复项的列表,但现在我该如何删除不在此列表中的重复项? var query = db.Incidents.Where(x => x.IsAttendanceIncident == “Y”).GroupBy(x => new { x.EmployeeId, x.DateOfIncident, x.IsAttendanceIncident }) .Select(x => x.FirstOrDefault()); 更新: 所以我继续编写自定义IEqualityComparer。 现在,如何使用id删除不在我的distinctItems中的上下文中的事件? static void Main(string[] args) { DALIncidents.AttendanceEntities1 […]

使用闭包来跟踪变量:好主意或肮脏的技巧?

好吧,我需要能够跟踪作为另一个对象属性的值类型对象,如果没有这些属性实现IObservable接口或类似属性,则无法完成。 然后我想到了闭包和Jon Skeet的着名例子以及它如何打印出9次(或10次)而不是数字的升序。 所以我想为什么不这样做: Class MyClass { … Func variable; … public void DoSomethingThatGetsCalledOften() { MyValueType blah = variable(); //error checking too not shown for brevity //use it } … } … in some other consuming code … MyClass myClass = new MyClass(); myClass.variable = () => myOtherObject.MyOtherProperty; //then myClass will get the current value […]

如何创建返回对象属性的lambda表达式,具有此属性的名称?

我完全迷失在这一个。 我有一段代码可以像我这样实现我需要的东西: return filters.Add(m => m.Metadata.RecordId).IsEqualTo(1); 其中m是TestObj类对象, Add方法的参数是Expression<Func> 。 现在问题是我无法在Add中硬编码m.Metadata.RecordId,因为我在这里得到的是一个字符串,告诉我应该使用的属性,在本例中为“Metadata.RecordId”。 我需要做的是用这个字符串构造这样一个表达式,它将与m => m.Metadata.RecordId做同样的事情。 我需要这样的东西: string propertyName = “Metadata.RecordId”; Expression expr = null;//create expression here somehow that will do the same as m => m.Metadata.RecordId return filters.Add(expr).IsEqualTo(1); 我怎么做?