Tag: lambda

在C#中,有一种方法可以使用reflection检索内置数据类型属性

使用reflection我想从C#对象中仅检索内置数据类型属性。 有没有更好的方法,然后使用一堆|| (ors)在Where方法中指定我感兴趣的类型? Type sourceType = typeof(TSource); var props = sourceType.GetProperties() .Where(pi => pi.PropertyType == typeof(int) || pi.PropertyType == typeof(string)); // …. etc.

如何使用LINQ从子文件夹递归读取文件名

如何使用LINQ或LAMBDA表达式以递归方式从目录及其子文件夹中读取带有dll扩展名的文件名。 现在我正在使用嵌套for-each循环来执行此操作。 有没有办法使用LINQ或LAMBDA表达式?

EF扩展方法:“只能从LINQ到实体调用此函数。”

我为EF实体做了一个扩展方法: public static IEnumerable WildcardSearch(this IEnumerable entity, string param, Func selector) { return entity.Where(l => SqlFunctions.PatIndex(param, selector(l)) > 0); } //exception: This function can only be invoked from LINQ to Entities. result = context.FOO.WildcardSearch(id, x => x.Id).ToList(); 如果我尝试使用它,我会得到上面的例外。 但是,如果我直接在我的集合上运行(我假设的)相同的代码,它就像预期的那样工作。 为什么我会得到exception,有没有办法解决这个问题? 类似的线程建议将类型更改为IQueryable ,但它似乎没有帮助。 //this works result = context.FOO.Where(x => SqlFunctions.PatIndex(id, x.Id) > 0).ToList();

在C#中使用Lambda的UnHooking事件#

我经常遇到想要订阅事件的情况,但我想使用lambda这样做: public class Observable { public event EventHandler SomethingHappened; public void DoSomething() { // Do Something… OnSomethingHappened(); } } // Somewhere else, I hook the event observable.SomethingHappened += (sender, args) => Console.WriteLine(“Something Happened”); 我遇到的问题是我不知道如何取消事件。 由于lambda在引擎盖下创建了一个匿名委托,我没有什么可以调用的-= on。 现在,我可以创建一个方法: private void SomethingHappened(object sender, EventArgs args) { Console.WriteLine(“Something Happened”); } 然后我可以挂钩/取消所有我想要的东西: observable.SomethingHappened += SomethingHappened; observable.SomethingHappened -= SomethingHappened; 但我真的非常非常喜欢使用我的lambda。 […]

从OrderBy中使用的方法返回表达式

我想编写一个由子类重写的抽象方法,该方法的作用是返回一个表达式,以便随后在LINQ OrderBy() 。 像这样的东西: 注意: Messageinheritance自Notes类, MyModelinheritance自MsgModel 。 public class Notes { // abstract definition; using object so that I can (I hope) order by int, string, etc. public abstract Expression<Func> OrderByField(); // … private string GetOrderByFieldName() { // I am not sure how to write this // This is my problem 2. Please see […]

是否可以使用Linq和lambdas而不包含System.Linq命名空间?

前段时间,我一直在研究一个相当扭曲的项目 – 我只能在单个范围内编写代码,然后将其放入C#函数(由另一个模块)。 我只能使用之前声明的名称空间(我对它们没有影响)并且只能使用我工作的作用域中的变量。因此,我无法更改标题和包含的库。 当我想操作generics集合时出现问题 – 我既不能使用lambda表达式也不能使用LINQ – 我根本无法using System.Linq; ,因为我无法访问文件头。 我只需做一件简单的事情,没有LINQ或lambda就很容易管理。 但是,之后我想知道会发生什么,如果我不得不在IEnumerable上使用一些更复杂的操作。 从那以后,我的问题出现了: 是否可以在不更改文件头和添加新命名空间的情况下使用LINQ或lambdas? 假设我们有一个List _Numbers = new List(); 。 让它充满一些数字。 现在我想从中选择所有偶数。 using System.Linq; 在标题中,解决方案很明显: List _NewList = _Numbers.Where(n => n % 2 == 0).ToList(); 要么 List _NewList = (from _Number in _Numbers where _Number % 2 == 0 select _Number).ToList(); 但是如果不包含LINQ,我该如何实现呢? 我的第一个猜测是这样的: List […]

如何声明Linq表达式变量以使其作为dbParameter处理

我正在尝试针对Entity框架(或其他Linq提供程序)创建动态查询。 让我用一些示例代码解释我的问题。 如果我硬编码表达式: var id = 12345; Expression<Func> myLambda = (s) => s.Id == id; var finalQuery = context.ItemSearch.Where(myLambda); this.Log((finalQuery as ObjectQuery).ToTraceString()); 生成的SQL如下所示: SELECT … FROM ViewItemSearch “Extent1” WHERE “Extent1”.ID = :p__linq__0 一个很好的:p__linq__0 dbParameter。 如果我创建一个表达式: var id = 12345; ParameterExpression param = Expression.Parameter(typeof(ItemSearch), “s”); Expression prop = Expression.Property(param, “Id”); Expression val = Expression.Constant(id); Expression searchExpr […]

Linq表达式如何确定平等?

我正在考虑使用Linq Expression作为字典中的键。 但是,我担心我会得到奇怪的结果,因为我不知道Linq表达式如何确定Equality。 派生自Expression的类是否比较值相等或引用相等? 或者换句话说, Expression<Func> first = () => new object(); Expression<Func> second = ()=>new object(); bool AreTheyEqual = first == second;

使用lambda函数的列表中对象属性值的总和

我有以下内容: List ,其中包含许多OutputRow对象。 我想知道是否有一种方法可以让我在列表中使用lambda函数来返回列表中每个OutputRow对象上某个propertyX的值的总和。 示例列表: OutputRow.propertyX = 4 OutputRow.propertyX = 6 OutputRow.propertyX = 5 返回15

Lambda参数不在范围内 – 构建二进制lambda表达式时

手动创建lambda表达式时,我得到一个“参数不在范围内”的exception。 关于我做错了什么的任何想法? public class OtherType { public string First_Name { get; set; } public string Last_Name { get; set; } } static void Main(string[] args) { Expression<Func> l2 = p => p.First_Name == “Bob”; l2.Compile(); // Works PropertyInfo property = typeof(OtherType).GetProperty(“First_Name”); ParameterExpression para = Expression.Parameter(typeof(OtherType), “para”); ConstantExpression right = Expression.Constant(“Bob”, typeof(string)); MemberExpression left = Expression.Property(Expression.Parameter(typeof(OtherType), […]