Tag: lambda

带有“OR”子句的通用表达式树,用于每个提供的属性

我为IQueryable创建了一个通用的搜索扩展方法,使您可以搜索单个属性以查看其中是否包含搜索词。 http://jnye.co/Posts/6/c%23-generic-search-extension-method-for-iqueryable 我现在想让用户选择多个属性在每个属性中进行搜索,如果任何属性包含文本,则匹配。 代码: 用户输入以下代码以执行此搜索: string searchTerm = “Essex”; context.Clubs.Search(searchTerm, club => club.Name, club => club.County) //Note: If possible I would rather something closer to the following syntax… context.Clubs.Search(club => new[]{ club.Name, club.County}, searchTerm); // … or, even better, something similar to this… context.Clubs.Search(club => new { club.Name, club.County}, searchTerm); 这将返回任何名为“Essex”的高尔夫俱乐部或郡。 public static IQueryable Search(this […]

获得处置关闭 – 标记方法是安全的

这是关于ReSharper的警告“进入废弃封闭”,这通常在后来处置的物体用于lambda时出现。 在C#中获得处置关闭? 更详细地讨论了这一点。 我的问题是:对于采用这种lamdbas并立即执行它们的方法(所以你可以确定它们总是在处理掉所述对象之前执行): 有没有办法将它们标记为安全,以便使用该方法的任何代码都不再产生这些警告? 例: using (var myObject = new MyDisposableObject()) { DoThisTwice(() => myObject.DoSomething()); } … void DoThisTwice(Action do) { do(); do(); } DoThisTwice接受委托(或lambda)并同步执行它。 到方法返回时,将不再执行lambda。 只有这样才能处理myObject ,所以我们很高兴。 我们可以用注释来标记调用DoThisTwice的行,但必须以类似的方式在所有地方使用该方法完成。 相反,我想将DoThisTwice标记为安全,因此Resharper不会为该方法的任何调用者显示任何警告。

如何将数据添加到DataGridView

我有一个类似的结构 X={ID=”1″, Name=”XX”, ID=”2″, Name=”YY” }; 如何将此数据转储到两列的DataGridView gridView就像 ID | Name 我们可以使用LINQ来做到这一点。 我是DataGridView新手Pleaese帮我做这个.. 提前致谢

entity framework:无法创建类型为’System.Collections.Generic.IList`1’的常量值

这使我今天无法解决问题。 我有这个简单的查询 var result = DataContext.Accommodations.Where(a => (criteria.MinPrice == null || a.AccommodationRates.Any(r => r.From >= criteria.MinPrice)) && (criteria.MaxPrice == null || a.AccommodationRates.Any(r => r.To criteria.Locations.Contains(j.Place.PlaceName))) ); 此查询的最后一行导致我出现问题 (criteria.Locations == null || criteria.Locations.Count == 0 || a.AccommodationPlaceJoins.Any(j => criteria.Locations.Contains(j.Place.PlaceName))) 它给出的错误是 无法创建类型为’System.Collections.Generic.IList`1’的常量值。 在此上下文中仅支持基本类型(例如Int32,String和Guid’)。 我甚至没有尝试创建列表。 我在这里尝试做的就是带回与一个地方相关的住宿(Place表中通过AccommodationPlaceJoin表链接到住宿表的地名)等于标准中的任何一个地名.Locations(属于IList类型)。 我已经尝试将此行更改为此,但它不起作用。 (criteria.Locations == null || criteria.Locations.Count == 0 || a.AccommodationPlaceJoins.Any(j => criteria.Locations.Any(l […]

使用表达式动态评估属性字符串

如何构建一个能够实现以下目标的表达式: public object Eval(object rootObj, string propertyString) 例如: Eval(person, “Address.ZipCode”) => return person.Address.ZipCode Expression.PropertyOrField不起作用,因为我没有每个中间属性的类型。 我想避免在脚本库上创建依赖项。 我想尝试使用表达式,因为它允许我存储这些表达式树的缓存,因为它们将被执行多次。 我知道可以通过reflection迭代或递归地执行此操作。

代表,Lambdas,Action,Func,匿名函数

我只想validation我对以下内容的理解 委托 – 方法签名 Lambdas – 匿名函数 匿名函数 – 就是这样 操作 – 不返回任何内容的匿名函数 Func – 一个返回某些东西的匿名函数 嗯…他们都做类似的事情,你如何定义和知道何时使用每个? 对不起,我不好解释

用C#写我的第一个DSL,然后挂上func &Action

我正在努力编写我的第一个DSL用于工作中的简单工具。 我正在使用构建器模式来设置复杂的父对象,但我遇到了砖墙,用于构建父对象的子集合。 这是一个示例: 使用: var myMorningCoffee = Coffee.Make.WithCream().WithOuncesToServe(16); 关闭的样本(我认为这就是他们所谓的): var myMorningCoffee = Coffee.Make.WithCream().PourIn( x => { x.ShotOfExpresso.AtTemperature(100); x.ShotOfExpresso.AtTemperature(100).OfPremiumType(); } ).WithOuncesToServe(16); 示例类(没有子PourIn()方法,因为这是我想要弄清楚的。) public class Coffee { private bool _cream; public Coffee Make { get new Coffee(); } public Coffee WithCream() { _cream = true; return this; } public Coffee WithOuncesToServe(int ounces) { _ounces = ounces; return […]

使用Linq 将List 转换为List <KeyValuePair >

可能重复: 是否有LINQ方式从键/值对列表转到字典? 假设我有一个List ,如下所示: var input = new List() { “key1”, “value1”, “key2”, “value2”, “key3”, “value3”, “key4”, “value4” }; 基于这个列表,我想转换为List<KeyValuePair> ,原因是允许相同的键,这就是为什么我不使用Dictionary。 var output = new List<KeyValuePair>() { new KeyValuePair(“key1”, “value1”), new KeyValuePair(“key2”, “value2”), new KeyValuePair(“key3”, “value3”), new KeyValuePair(“key4”, “value4”), }; 我可以通过使用下面的代码来实现: var keys = new List(); var values = new List(); for (int index = […]

将强类型属性名称作为参数传递

我有一个IEnumerable的集合,它被传递给一个填充DropDownList的扩展方法。 我还想将DataValueField和DataTextField作为参数传递,但我希望它们是强类型的。 基本上,我不想为DataValueField和DataTextField参数传递string ,这很容易出错。 public static void populateDropDownList(this DropDownList source, IEnumerable dataSource, Func dataValueField, Func dataTextField) { source.DataValueField = dataValueField; //<– this is wrong source.DataTextField = dataTextField; //<– this is wrong source.DataSource = dataSource; source.DataBind(); } 像这样打电话…… myDropDownList.populateDropDownList(states, school => school.stateCode, school => school.stateName); 我的问题是,如何将强类型的DataValueField和DataTextField作为参数传递给populateDropDownList?

Func 与委托和lambda表达式之间的区别

在深化自己更高级的C#function的同时,我遇到了一些代码,我并不完全知道它的区别。 这是关于这两行: Func giveLength = (text => text.Length); 和 Func giveLength = delegate(string text) { return text.Length; }; 这可以以相同的方式使用: Console.WriteLine(giveLength(“A random string.”)); 所以基本上……这两条线有什么区别? 这些行是否编译为相同的CIL?