Tag: lambda

通用LINQ查询谓词?

不确定这是否可行,或者我是否正确地表达了我正在寻找的内容,但我在我的库中反复使用以下代码,并希望练习一些DRY。 我根据用户提供的简单搜索字段ala Google查询了一组SQL Server表。 我正在使用LINQ根据搜索字符串中的内容组成最终查询。 我正在寻找一种方法来使用generics并传递lambda函数来创建一个可重用的例程: string[] arrayOfQueryTerms = getsTheArray(); var somequery = from q in dataContext.MyTable select q; if (arrayOfQueryTerms.Length == 1) { somequery = somequery.Where( e => e.FieldName.StartsWith(arrayOfQueryTerms[0])); } else { foreach(string queryTerm in arrayOfQueryTerms) { if (!String.IsNullOrEmpty(queryTerm)) { somequery = somequery .Where( e => e.FieldName.Contains(queryTerm)); } } } 我希望创建一个带签名的generics方法,它看起来像: private IQueryable getQuery( […]

如何在lambda表达式中捕获外部变量的值?

我刚刚遇到以下行为: for (var i = 0; i { Debug.Print(“Error: ” + i.ToString()); }); } 将导致一系列“错误:x”,其中大多数x等于50。 同理: var a = “Before”; var task = new Task(() => Debug.Print(“Using value: ” + a)); a = “After”; task.Start(); 将导致“使用价值:之后”。 这显然意味着lambda表达式中的串联不会立即发生。 在声明表达式时,如何在lambda表达式中使用外部变量的副本? 以下内容不会更好(我承认这不一定是不连贯的): var a = “Before”; var task = new Task(() => { var a2 = a; Debug.Print(“Using […]

如何将Func 转换为Predicate ?

是的我已经看过了,但我找不到具体问题的答案。 给定一个lambda testLambda ,它接受一个布尔值(我可以使它成为Predicate或Func,这取决于我) 我需要能够同时使用List.FindIndex(testLambda)(采用谓词)和List.Where(testLambda)(采用Func)。 任何想法如何做到两个?

如何将一种类型的表达式树转换为不同的表达式类型?

如果我有两个几乎相同的类Animal和AnimalViewModel以及一个与viewmodel相关的表达式树,我该如何将它翻译成Animal ? public class Animal { public string Species { get; set; } public string Name { get; set; } public string Sound { get; set; } } public class AnimalViewModel : ViewModelBase { public string Species { get; set; } public string Name { get; set; } public string Sound { get; set; } […]

用于连接的Lambda表达式

public class CourseDetail { public CourseDetail(); public string CourseId { get; set; } public string CourseDescription { get; set; } public long CourseSer { get; set; } } public class RefUIDByCourse { public long CourseSer { get; set; } public double DeliveredDose{ get; set; } public double PlannedDose{ get; set; } public string RefUID { […]

EF Lambda:Include路径表达式必须引用导航属性

这是我的表达: Course course = db.Courses .Include( i => i.Modules.Where(m => m.IsDeleted == false) .Select(s => s.Chapters.Where(c => c.IsDeleted == false)) ).Include(i => i.Lab).Single(x => x.Id == id); 我知道原因是模块部分中的Where(m => m.IsDeleted == false) ,但为什么会导致错误? 更重要的是,我该如何解决? 如果我删除where子句它工作正常,但我想过滤掉已删除的模块。

具有异步lambda和Task.WaitAll的Task.Factory.StartNew

我正在尝试在任务列表中使用Task.WaitAll 。 事情是任务是一个异步lambda,它打破Tasks.WaitAll因为它永远不会等待。 这是一个示例代码块: List tasks = new List(); tasks.Add(Task.Factory.StartNew(async () => { using (dbContext = new DatabaseContext()) { var records = await dbContext.Where(r => r.Id = 100).ToListAsync(); //do long cpu process here… } } Task.WaitAll(tasks); //do more stuff here 这不会因为异步lambda而等待。 那我该如何等待我的lambda中的I / O操作呢?

LINQ to entities – 构建where子句以在多对多关系中测试集合

所以,我正在使用Linqentity framework。 我有2个实体: Content和Tag 。 他们彼此处于多对多的关系中。 Content可以有很多Tags , Tag可以有很多Contents 。 所以我试着写一个查询来选择任何标签名称等于blah所有内容 这些实体都将另一个实体的集合作为属性(但没有ID)。 这是我在努力的地方。 我确实有Contains的自定义表达式(所以,无论谁可以帮助我,你可以假设我可以为一个集合做一个“包含”)。 我得到了这个表达式: http : //forums.microsoft.com/MSDN/ShowPost.aspx?PostID = 2670710&SiteID = 1 编辑1 我最终找到了自己的答案。

C#=>运营商?

我对C#中的=>运算符有疑问。 我正在查看Expression Blend 4样本。 Contact示例中有一行包括: //In C:\Program Files (x86)\Microsoft Expression\Blend 4\Samples\en\Contacts\ //Contacts\ViewModels\ContactsViewModel.cs: contactDetailWindow.Closed += (o, e) => { finishedCallback(contactDetailWindow.DialogResult); // Or, C:\Program Files (x86)\Microsoft Expression\Blend 4\Samples\en\ // Contacts\Contacts\ViewModels\ContactsViewModel.cs this.EditContact(newContact, dialogResult => { if (dialogResult.HasValue && dialogResult.Value) { this.Contacts.Add(newContact); } }); }; 什么是=>运算符实际上在做什么? 它是否压倒一切?

如何取消订阅使用lambda表达式的事件?

我有以下代码让GUI响应集合中的更改。 myObservableCollection.CollectionChanged += ((sender, e) => UpdateMyUI()); 首先,这是一个很好的方法吗? 第二:取消订阅此活动的代码是什么? 它是相同的但是 – =(然后又是完整的匿名方法)?