Tag: lambda

C#Linq或Lambda从类中获取Dictionary <string,List >

我似乎找不到我要找的答案。 希望这里有人可以提供帮助。 我有一个包含某些进程的设置信息的类。 每个类都有一个processId,taskId和我当前逻辑不需要的各种其他信息。 public class ProcessSetting { public int ProcessId { get; set; } public int TaskId { get; set; } // Other properties not needed } 可以存在多个ProcessSettings。 我将数据拉入List。 可以将processId与多个TaskId相关联。 例如: ProcessId: 1, TaskId: 1 ProcessId: 1, TaskId: 1 ProcessId: 1, TaskId: 2 ProcessId: 1, TaskId: 3 ProcessId: 2, TaskId: 3 ProcessId: 2, TaskId: […]

条件Linq在嵌套对象上选择

鉴于我有一个像这样的简单对象 public class TestA { public int TestAId { get; set; } public string Description { get; set; } public IEnumerable TestBCollection { get; set; } } public class TestB { public int TestBId { get; set; } public int FkTestAId { get; set; } public string Description { get; set; } } List a […]

传递Func keySelector错误

static void Main() { string[] a = { “a”, “asd”, “bdfsd”, “we” }; a = a.OrderBy(fun).ToArray(); } private static int fun(string s) { return s.Length; } 它给出了编译时错误。 我知道我们可以用这样的Lambda表达式做到这一点。 a.OrderBy(s=>s.Length).ToArray(); 但我想通过定义不同的function来做到这一点。 我做错了什么?

是否可以在Lambda表达式中包含SqlFunctions.StringConvert?

我一直在学习表达式并使用下面的代码为数据库模型添加构建表达式(EF4 – ORACLE而不是SQL!) 这完全适用于Oracle,并允许我动态构建谓词,如”CustomerId”, “Contains”, 2到f=>f.CustomerId.ToString().ToLower().Contains(“2”) 但是,如果我尝试对抗SQL Server,那么它会失败,因为我需要调用SqlFunctions.StringConvert – 但我不知道如何将它包含在Lambda中? 我的最终结果将是: f=> SqlFunctions.StringConvert(f.CustomerId).ToLower().Contains(“2”) 谢谢 :) 编辑:添加了我尝试过的例子 这段代码看起来几乎可以工作,有点像! 但是,它会在var sqlExpression行上引发错误 Expression of type ‘System.Double’ cannot be used for parameter of type ‘System.Nullable`1[System.Double]’ of method ‘System.String StringConvert(System.Nullable`1[System.Double])’ MethodInfo convertDouble = typeof(Convert).GetMethod(“ToDouble”,new Type[]{typeof(int)}); var cExp = Expression.Call(convertDouble, left.Body); var entityParam = Expression.Parameter(typeof(TModel), “f”); MethodInfo sqlFunc = typeof(SqlFunctions).GetMethod(“StringConvert”, new […]

KeyValuePair键上的相交列表?

如何根据键输入两个KeyValuePairs列表? 我试过了: List<KeyValuePair> listA = new List<KeyValuePair>(); List<KeyValuePair> listB = new List<KeyValuePair>(); … var result = listA.Intersect(listB); 这预计不起作用。 我是否需要根据键编写自己的比较器,或者使用LINQ / Lambda有一种简单的方法吗? 谢谢!

entity framework的集合值参数?

在我的上一个项目中,我决定使用entity framework,直到我尝试使用“where in”获取数据时一切顺利,我收到了错误。 经过一番小小的搜索,我发现了这篇文章和post 。 这就是我想要做的 var all = fooelements .Where(l=>controlsToGet .Contains(l.Control.Name)); 是否有任何处理它与lambda表达式或linq与entity framework? 谢谢

是否可以在lambda表达式中定位EventHandler?

举一个简单的例子,如果我有某种按钮UI类,我是否可以编写一个函数来获取指向其Click事件处理程序的表达式: SomeMethod(button => button.Click); 我正在尝试消除当前用于系统的一些魔术字符串以使事件等待。 有问题的代码来自Frank Krueger撰写的博客文章 (如果你想要一些背景,那么值得一读)。 public static Task GetEventAsync(this object eventSource, string eventName) where TEventArgs : EventArgs { //… Type type = eventSource.GetType(); EventInfo ev = type.GetEvent(eventName); //… } 虽然内部的细节可能并不重要,但完整的方法允许您使用Event触发作为Task的完成源,使得使用await更容易管理。 对于某个引发事件的类,您可以通过简单的调用将该事件绑定到Task 。 Task eventTask = someEventCausingObject.GetEventAsync(“SomeEventHandler”); // traditionally used as someEventCausingObject.SomeEventHandler += …; await eventTask; // Proceed back here when SomeEventHandler event […]

具有自定义格式的C#Generic DateTime.ToString()

使用时: DateTime.ToString().Contains(“2016”) entity framework产生: CAST(DateValue AS nvarchar(max)) LIKE ‘%2016%’ 这使用默认的日期格式“mon dd yyyy hh:miAM(或PM)” 我想用“yyyy-mm-dd hh:mi:ss(24h)”,这可以通过以下方式获得: CONVERT(VARCHAR(max), DateValue, 20) LIKE ‘%2016%’ 我需要帮助将这种格式实现到现有的generics方法。 static Expression<Func> Expr(Expression<Func> source) { return source; } static MethodInfo GetMethod(this LambdaExpression source) { return ((MethodCallExpression)source.Body).Method; } static readonly MethodInfo Object_ToString = Expr((object x) => x.ToString()).GetMethod(); static readonly MethodInfo String_Contains = Expr((string x) => […]

关于generics,inheritance和链接的棘手问题

对于上下文 – 阅读本文 。 问题: class Program { static void Main() { var b = new bar(); b.buzz().fizz().buzz().fizz(); //cool // ^FAIL!!!…<———————————— Console.ReadLine(); } } public class foo { public foo fizz() { return this; } } public class bar : foo { public bar buzz() { return this; } } 解: class Program { static […]

使用linq检查另一个数组中是否存在来自一个数组的值

我有一个列表,其中myclass定义了一些属性 List myClassList = new List(); myClassList.Add(new MyClass() { Id = 1, Name = “My first test”, Key = “First” }); myClassList.Add(new MyClass() { Id = 2, Name = “My second test”, Key = “Second” }); 然后我有一个路径,即c:\ my folders \ company name \ My First Test,我使用regex闯入字符串数组,即myArrayPath 我想找到myClassList的任何基于给定属性的元素,即Name可以在myArrayPath的任何元素中找到,理想情况下我想返回Key,但如果我返回匹配myArrayPath中的一个元素的对象,这将同样好。 有没有办法使用linq和/或lambda表达式来实现这一点。 谢谢。