【C# 表达式树Lambda扩展(四)】教程文章相关的互联网学习教程文章

c#从字符串表示Lambda到Func【代码】

我尝试从string实现e动态Funx表达式Expression<Func<CustomerDto, object>> expr = (src) => src.Customer.Id; Func<CustomerDto, object> delg = expr.Compile(); var id = delg.Invoke(customerListDtos[0]);并返回id(es.123) 所以现在我尝试从string创建表达式public Expression<Func<T, object>> GetLambda<T>(string property){var param = Expression.Parameter(typeof(T), "p");Expression body = param;foreach (var membe...

使用C#Linq Lambda将两个对象的字段合并为一个,最好不要使用匿名对象【代码】

我有这样的类设置:public class Summary {public Geometry geometry { get; set; }public SummaryAttributes attributes { get; set; } } public class SummaryAttributes {public int SERIAL_NO { get; set; }public string District { get; set; }} public class Geometry {public List<List<List<double>>> paths { get; set; } }我为该对象获取一个json字符串记录,并将它们塞进那里:List<Summary> oFeatures = reportObject....

c# – 递归lambda表达式通过有向图找到路径?【代码】

我需要在复杂的图形结构中找到一条或多条路径.该图使用类似于此的内容构建:class Node {public string Value { get; set;}public List<Node> Nodes { get; set;}public Node(){Nodes = new List<Node>();} }使这种复杂化的原因是节点可以引用回早期节点.例如,A -> C -> E -> A我需要做的是获取表示通过节点的路径的堆栈列表,直到我到达具有特定值的节点.由于可能存在一些非常大的路径,我们可以尝试使用最大节点.List<Stack<Node>>...

c# – 用于对比不同对象的Lambda表达式【代码】

我有两个列表,一个是联系人,另一个是员工.我想生成非员工的联系人子集.以下表达式似乎可以告诉我,有些联系人不是员工,现在我需要一个符合该条件的联系人列表:if(myContacts.Select(c=>c.contactID).Except(employees.Select(e=>e.contactID)).Any() {//get the subset of contacts and do stuff to them.... }TIA! 罗恩解决方法:如果您的员工和联系人序列是相同的类型对象(或者两者都继承自相同类型,如Contact),那么您可以创建Eq...

c# – 在运行时使用新的匿名类型创建lambda表达式【代码】

我想调用一个需要这样的参数的方法:Expression<Func<sometype, 'a>> expr我需要在运行时构造这个参数,因为我不知道之前的匿名类型是什么样的;它可以有任何数量的字段:x => new { a=x.a, b=x.b, c=x.c, etc... }我可以在运行时创建一个类型具有相同的’签名(这是正确的单词吗?)作为所需的匿名类型,但问题是:如何在运行时从那个构造这个lambda表达式?特别是Expression.New是烦我的,因为我需要传递一个构造函数信息给它,我必须从...

c# – 使用Lambda捕获参数【代码】

当我尝试捕获函数的参数时,C#编译器生成了什么代码?partial class NewClass : Window {public NewClass(){InitializeComponent();new Thread(Work).Start();}void Work(){Thread.Sleep(5000); // Simulate time-consuming taskUpdateMessage("The answer");}void UpdateMessage(string message){Action action = () => txtMessage.Text = message;Dispatcher.BeginInvoke(action);} }我知道lambdas可以在创建新类之后在其词法范围...

c# – 替换lambda表达式中的参数类型【代码】

我试图将lambda表达式中的参数类型从一种类型替换为另一种类型. 我在stackoverflow上找到了其他答案,即this one,但我没有运气. 想象一下你有一个域对象和一个存储库,你可以从中检索域对象. 但是,存储库必须处理自己的数据传输对象,然后映射并返回域对象: ColourDto.cs public class DtoColour {public DtoColour(string name){Name = name;}public string Name { get; set; } }DomainColour.cs public class DomainColour {public...

C#:使用lambda对GroupBy的每个集合元素【代码】

我有一个Component的集合,这些集合有一个Pax的集合:public class Component {public IEnumerable<Pax> Paxes { get; set; } }public class Pax {public int Number { get; set; } public int Room { get; set; } }我想通过乘客列表对我的Component集合(这是一个IEnumerable< Component>)进行分组.var groups = components.GroupBy(c => c.Paxes);当然,不期望这些团体.在组件中重复的Paxes没有相同的对象引用,所以我必须在组表达...

检查C#Action / Lambda / Delegate包含任何代码/语句【代码】

任何人都可以告诉我是否有办法看一个动作是否包含任何代码?Action x = new Action(()=>{});应该返回false,而Action x = new Action(()=>{var x = "i am a string" });应该回归真实. 也许用反射?解决方法:也许这会有所帮助:Action x = new Action(() =>{var xx = "i am a string";});Action x1 = new Action(() =>{});MethodBody mb = x.Method.GetMethodBody();MethodBody mb1 = x1.Method.GetMethodBody();byte[] b = mb.GetIL...

c# – 比较lambda表达式中的列表【代码】

我正在寻找一种方法来自动比较对象的适当性与lambda表达式中的值列表.例如,我有这个lambda表达式:List<MyObjectType> myObjectList = GetObjectValues();List<MyObjectType> filterdObjectList = myObjectList.Where(x => x.objectProp == ??a list of values??)基本上我需要在具有多个有效值的“objectProp”之后过滤我的对象列表.(注意:我不想使用“Foreach”)解决方法: List<MyObjectType> myObjectList = GetObjectValues();...

c# – lambda表达式中的变量如何赋值【代码】

以下示例中的索引如何获取其值?我知道n是从源数字中自动获得的,但是,虽然含义很明确,但我没有看到索引是如何赋值的:int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; var firstSmallNumbers = numbers.TakeWhile((n, index) => n >= index);TakeWhile的签名是:public static IEnumerable<TSource> TakeWhile<TSource>(this IEnumerable<TSource> source, Func<TSource, int, bool> predicate);解决方法:此版本的TakeWhile提供...

c# – linq / lambda查询中的双内连接?【代码】

我得到了这个我想要转换为Linq的SQL查询.这是一个问题: 我正在制作一个需要从3个不同的表中返回值的asp.net apiCREATE TABLE Locatie (locatieId INT IDENTITY(1,1) not null,postcode VARCHAR(10) not null,huisnummer INT not null,adres VARCHAR(50) not null,plaats VARCHAR(50) not null,CREATE TABLE Veren...

c# – 如何轻松地将环境变量添加到多个Lambda函数?

我正在开发一个AWS无服务器应用程序,我是AWS的新手,所以请纠正这个问题中的任何误解.我们有大约30个lambda函数在RDS中托管的SQL数据库上执行基本的CRUD操作.我们使用EntityFramework Core来创建数据库.这意味着,为了使用数据库,lambda函数每个都需要访问EF连接字符串.我不想将连接字符串留在内存中(它包含明文密码)所以我把它放在一个加密的环境变量中. 我可以解决如何做到这一点的唯一方法是通过lambda管理控制台GUI将加密的环境变...

c# – 如何从MemberExpression创建lambda表达式【代码】

我的最终目标是遍历lambda表达式中的嵌套属性,并确定是否有任何属性为null,但是我在创建基于成员表达式的新lambda表达式时遇到了问题. 采取这种虚拟方法:public static void DoStuff<TModelDetail, TValue>(Expression<Func<TModelDetail, TValue>> expr, TModelDetail detail) {var memberExpression = expr.Body as MemberExpression;if (memberExpression == null && expr.Body is UnaryExpression){memberExpression = ((Unar...

c# – 确定将lambda编译为实例方法的时间【代码】

前言:我试图在这里非常精确地描述这个场景. TL; DR版本是’如何判断lambda是否会编译成实例方法或闭包’… 我在我的WPF项目中使用MvvmLight,并且该库最近更改为使用WeakReference实例以保存传递给RelayCommand的操作.因此,实际上,我们有一个对象,它将WeakReference保存到Action< T>. 现在,由于升级到最新版本,我们的一些命令停止工作.我们有一些像这样的代码:ctor(Guid token) {Command = new RelayCommand(x => Messenger.Defau...