Tag: lambda

我可以在C#中动态生成linq表达式吗?

我现在有一块看起来像这样的Linq; List childrenToBeRemoved = this.ItemsSource.Where(o => o.ParentID == “1234”).ToList(); 其中ItemsSource是动态的ObservableCollection。 这工作正常,但我遇到的问题是ParentID是一个可以变化的属性。 例如它可以命名为ParentPkey或ParentKey等。 我可以创建一个表达式,我可以在比较中指定要使用的属性吗? 我尝试过使用动态linq,但它不能使用动态集合,与pocos集合工作正常。 谢谢…

Task.Run和预期的委托

我不确定如何从以下观察结果中理解。 var f = new Func(uc.ViewModel.SlowProcess); 1) (VALID) string dataPromise = await Task.Run(() => f(token), token); 2) (VALID) string dataPromise = await Task.Run(() => uc.ViewModel.SlowProcess(token), token); 3) (ERROR) string dataPromise = await Task.Run(f(token), token); uc.ViewModel.SlowProcess是一个将CancellationToken作为参数并返回字符串的方法。 项目1)和2)有效且工作正常。 第3项无效,给出以下错误: 错误1’System.Threading.Tasks.Task.Run(System.Func>,System.Threading.CancellationToken)’的最佳重载方法匹配有一些无效的参数 错误2参数1:无法从’string’转换为’System.Func>’ 为什么我不能将f(令牌)作为代理传递? 如果我使用不带参数的方法,它也可以。

将两个lambda表达式与内部表达式结合使用

我有下一个类结构: public class Order { public User User { get; set; } public string Name { get; set; } } public class Authentication { public string Email { get; set; } } public class User { public string Name { get; set; } public List Auths { get; set; } } 我正在尝试在运行时构建一个表达式,以按User.Name,Order.Name或User.Auths.Email搜索实体 我试图结合三种表达方式: Expression<Func> usernameExpression […]

用条件过滤掉不同的元素

我有一个对象列表,其中包含一些属性的重复项。 我想根据条件得到所有非重复的以及1个重复项。 例如。 列表: 代码:1,等级:10 代码:1,等级:20 代码:2,等级:1 预期清单: 代码:1,等级:20 代码:2,等级:1 条件是重复元素的条件,抓住具有最高Grade元素。 如何编写lambda或linq表达式来执行此操作?

Lambda捕获问题与迭代器?

如果已经问过这个问题,请道歉,但假设我们有这个代码(我用Mono 2.10.2运行它并用gmcs 2.10.2.0编译): using System; public class App { public static void Main(string[] args) { Func f = null; var strs = new string[]{ “foo”, “bar”, “zar” }; foreach (var str in strs) { if (“foo”.Equals(str)) f = () => str; } Console.WriteLine(f()); // [1]: Prints ‘zar’ foreach (var str in strs) { var localStr […]

C语言中的动态Where子句lambdas

我有一个看起来像这样的搜索表单: 表单背后的代码如下所示: @using (Html.BeginForm()) { @Html.ValidationSummary() @Html.DropDownList(“SelectedType”, Model.TypeOptions) @Html.DropDownList(“SelectedSearch”, Model.SearchOptions) @Html.TextBoxFor(x => x.SearchTerm) } 我想要做的是从返回选项动态构造一个lambda where子句。 例如,如果用户选择“Process No”和“Contains”,那么lambda看起来就像 model.DataSource = _db.InstrumentLists.Where(x => x.Process_No.Contains(SearchTerm)); 或者,如果用户选择“PLC No”和“Equals”,那么lambda看起来就像 model.DataSource = _db.InstrumentLists.Where(x => x.PLC_No == SearchTerm); 我试图这样做,同时避免大案例陈述或if堆栈,即我不想要以下内容: if (SelectedType == “Process No” And SelectedSearch = “Contains”) model.DataSource = _db.InstrumentLists.Where(x => x.Process_No.Contains(SearchTerm)); elseif (SelectedType == “Process No” And SelectedSearch = […]

Lambda表达式返回错误

这是我的代码: SomeFunction(m => { ViewData[“AllEmployees”].Where(c => c.LeaderID == m.UserID); }) 并返回此错误: 并非所有代码路径都返回System.Func类型的lambda表达式中的值

如何在C#/ .NET中使用LINQ表达式树调用lambda

我想使用表达式树动态创建一个方法来调用lambda。 第一次调用ComposeLambda函数时,以下代码运行正常,但第二次调用失败,并显示以下错误消息。 为调用方法’Int32 lambda_method(System.Runtime.CompilerServices.Closure,Int32)提供的参数数量不正确 { Func innerLambda = i => i + 1; var composedLambda = ComposeLambda(innerLambda); Console.WriteLine(composedLambda.DynamicInvoke(0)); var composedLambda2 = ComposeLambda(composedLambda); Console.WriteLine(composedLambda2.DynamicInvoke(0)); } private static Delegate ComposeLambda(Delegate innerLambda) { Func outerLambda = i => i + 2; var parameter = Expression.Parameter(typeof (int)); var callInner = Expression.Call(innerLambda.GetMethodInfo(), parameter); var callOuter = Expression.Call(outerLambda.GetMethodInfo(), callInner); var composedLambdaType […]

使用Lambda或LINQ将类实例转换或映射到另一个实例的列表?

我有以下两个类: class MyData { public List PropertyList { get; private set;} public string PropertyB { get; set; } public string PropertyC { get; set; } } class MyData2 { public string PropertyA { get; set;} public string PropertyB { get; set; } public string PropertyC { get; set; } } 如果我有MyClass的实例,我需要将其转换为MyData2列表。 我可以通过循环MyData.PropertyList并缓存其他属性值并将它们插入MyData2列表来实现,如下所示: string propertyB = […]

条件LINQ在哪里声明?

我有一个linq语句,如果下拉索引不是0,我想添加一个额外的where子句。 people.Where(n.surname == “surname” || n.forename == “forename” && (dropdown.SelectedIndex > 0) ? n.id = dropdown.SelectedValue : n.id > 0).Select(n => n); 我甚至不确定我的尝试是否可能? 我想这样做,而不是写两个不同的陈述。 有任何想法吗? 谢谢