Tag: 谓词

需要使用DateTime转换的lambda表达式OrderBy

我正在尝试创建一个lambda表达式(Linq,C#3.5),它可以对数据类型为String但实际上包含可解析的DateTime的值执行OrderBy。 例如,典型值可能是“5/12/2009”,“1/14/2008”等。 下面的OrderBy子句可以正确地进行排序(就像字符串数据一样),但实际上我想将这些值视为DateTimes,并按日期执行排序。 (sortColumn类似于“dateCreated”。) List orderedList = unorderedList.OrderBy(p => p.Details.Find(s => s.Name == sortColumn).Value).ToList(); 有没有办法转换谓词中的值来执行此操作? 任何帮助赞赏!

如何调用Dictionary .TryGetValue()其中K:Predicate ,V:enum

我有Dictionary<Predicate, SomeEnum> : var dic = new Dictionary<Predicate, SomeEnum> { { (d) => d d > 90, SomeEnum.Bar } }; 我想像这样打电话给TryGetValue(K, out V) : dic.TryGetValue(99) 并收到 SomeStruct.Bar 但TryGetValue()第一个参数是Predicate ,而不仅仅是T 我怎么能做我想做的事? 我发现只有一个肮脏的解决方法: var kpv = dic.FirstOrDefault(p => p.Key(99)); if (kpv.Key != null) var result = kpv.Value; 还有其他方法吗? 或者如何正确实现我的想法? – 声明一个键不是一个常量,而是一个段。

在C#中为通用列表的FindAll添加参数

我有一个对象列表,我想用整数参数过滤 List objectList = new List(); // populate objectList with testObjects objectList.FindAll(GroupLevel0); private static bool GroupLevel0(testObject item) { return item._groupLevel == 0; } private class testObject { public string _FieldSQL = null; public int _groupLevel; } 我想要做的是让GroupLevel0接受一个整数作为参数,而不是硬编码为0.我在.NET 2.0中工作,所以lambda表达式是不行的。 甚至可以将参数传递给谓词吗? 谢谢,

将谓词转换为表达式<Func >

有可能以某种方式将Predicate to Expression<Func>转换Predicate to Expression<Func>吗? 我想使用我的ICollectionView的filter来使用下一个IQueryable函数: public static System.Linq.IQueryable Where(this System.Linq.IQueryable source, System.Linq.Expressions.Expression<System.Func> predicate) 谢谢

如何将谓词定义为函数参数

我希望能够写出一些东西 void Start(some condition that might evaluate to either true or false) { //function will only really start if the predicate evaluates to true } 我猜它必须是这样的forms: void Start(Predicate predicate) { } 每当谓词评估为true或false时,如何检查Start函数内部? 我对谓词的使用是否正确? 谢谢

是否可以缓存在lambda表达式中计算的值?

在以下代码的ContainsIngredients方法中,是否可以缓存p.Ingredients值而不是多次显式引用它? 这是一个相当简单的例子,我刚刚为了说明目的而编写,但我正在处理的代码引用了深入内部的值,例如。 p.InnerObject.ExpensiveMethod()。值 编辑:我正在使用来自http://www.albahari.com/nutshell/predicatebuilder.html的PredicateBuilder public class IngredientBag { private readonly Dictionary _ingredients = new Dictionary(); public void Add(string type, string name) { _ingredients.Add(type, name); } public string Get(string type) { return _ingredients[type]; } public bool Contains(string type) { return _ingredients.ContainsKey(type); } } public class Potion { public IngredientBag Ingredients { get; private set;} public string […]

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

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

使用Expression创建具有嵌套类的谓词

我有这个 : public class Company { public int Id { get; set; } public string Name { get; set; } } public class City { public int Id { get; set; } public string Name { get; set; } public int ZipCode { get; set; } } public class Person { public int Id { […]

如何在List 中为Find()创建一个好的谓词委托?

在查看MSDN之后,我仍然不清楚如何使用T的成员变量(其中T是一个类)在List中使用Find()方法形成一个正确的谓词 例如: public class Car { public string Make; public string Model; public int Year; } { // somewhere in my code List carList = new List(); // … code to add Cars … Car myCar = new Car(); // Find the first of each car made between 1980 and 2000 for (int x = […]

Expression.Call – 调用linq扩展名:FirstOrDefault,Where

我试图动态创建以下,但我在调用扩展方法FirstOrDefault时遇到问题: using(var context = new Entities()) { var list = context.Engines.Include(“Cars”).Select(e => e.Cars.FirstOrDefault()).ToList(); } 我有以下内容 Expression parameter = Expression.Parameter(typeof(Engine), “e”); Expression property = Expression.Property(parameter, “Cars”); 参数= {e} property = {e.Cars} 这些都很好,但是当我尝试调用FirstOrDefault方法时遇到问题: var result = Expression.Call(typeof(Queryable), “FirstOrDefault”, new type[] { typeof(Car)}, property); 我想得到 result = {e.Cars.FirstOrDefault()} 但我得到一个InvalidOperationException 类型’System.Linq.Queryable’上没有通用方法’FirstOrDefault’与提供的类型参数和参数兼容。 如果方法是非generics的,则不应提供类型参数。 任何帮助将非常感激。