Tag: lambda

哪一个是更好的lambda表达式或

我有遵循LINQ to SQL查询表达式 from msg in TblUserMessages join user in Aspnet_Users on msg.FromUserID equals user.UserId select new { msg.FromUserID, msg.ToUserID, msg.MessageLocationID, msg.MessageID, user.UserName } 并遵循LINQ方法表达式: TblUserMessages .Join ( Aspnet_Users, msg => msg.FromUserID, user => user.UserId, (msg, user) => new { FromUserID = msg.FromUserID, ToUserID = msg.ToUserID, MessageLocationID = msg.MessageLocationID, MessageID = msg.MessageID, UserName = user.UserName […]

OrderBy Lambda的通用列表

我正在尝试构建一个通用的查询机制来访问我的存储库。 我希望使用Lambda表达式来过滤和排序查询。 我正在努力寻找一种方法来传递一般的Lambda表达式列表,特别是对于order-by,并且非常感谢这样做的帮助。 编辑:我想要满足的2个要求是,不要将IQueryable暴露在存储库之外,但仍然能够在数据库级别执行一些过滤和排序。 为了更好地说明这一点,让我向您展示代码 public class Query { public class OrderBy { public Expression<Func> Clause { set; get; } // Order By clause public bool Descending = true; } public Expression<Func> Where { set; get; } // Where clause public IList<OrderBy> OrderBys { set; get; } // Where clause public Query() { OrderBys = […]

C#中的替代内联接口实现

我想在C#中使用内联接口实现,但是阅读像这样或者这样的post我发现它不像Java那样。 假设这个界面: public interface MyListener { void onHandleOne(); void onHandleTwo(); } 我将此接口作为参数传递: myMethod(MyListener listener){ //some logic } 当我调用它时,我想像在java中一样进行内联实现: myMethod(new MyListener () { @Override public void onHandleOne() { //do work } @Override public void onHandleTwo() { //do work } }); 作为替代方案,我创建了一个实现yhis接口的类,并使用此类来调用我的方法: public class MyImplementor : MyListener { public void onHandleOne() { //do work } public void […]

获取具有条件的子实体的实体对象(使用Dynamic Linq)

这个问题是Dynamic Lambda Expression中的Getting Count()属性的延续 我问过我们是否可以将Count()方法放在动态lambda表达式中。 我可以使用Dynamic Expression API来完成它。 答案由 – xmojmr提供 但是最近我不得不实现一个Dynamic Lambda Expression来获得带有过滤数据的子实体的结果。 细节 : 我有一个父实体与其子实体链接。 现在,当我从父实体获取数据时,它也会返回包含其子数据的数据集合。 根据我之前的要求,我必须计算每个父记录返回的所有子记录。 我用它做了 – ParameterExpression cParam = Expression.Parameter(typeof(CPNDBase), “c”); NewExpression newExp = Expression.New(typeof(DTDataModel)); List bindings = new List(); MemberInfo memberInfo = typeof(DTDataModel).GetMember(“FILE_COUNT”)[0]; Dictionary paramExSymbols = new Dictionary(); paramExSymbols.Add(“c”, cParam); Expression expression = System.Linq.Dynamic.DynamicExpression.Parse(null, “c.CPNDocs.Count()”, paramExSymbols); MemberBinding memberBinding = […]

将lambda表达式作为参数传递给方法?

这似乎是一个常见的要求,但我无法在任何地方找到解决方案。 我有一个方法,它将根据传递给它的参数OrderBy集合。 我想将’OrderBy’的内容传递给方法,但无法解决如何做到这一点。 我试过的 我已经尝试了一个带字符串的开关(例如,如果你传递’姓名’,它会点击按名称命名它的case ),但这感觉’hacky’和不必要。 我知道它就像Func ,但我无法破解它。 PSEUDO代码: GetOrderedCollection([NOT SURE] orderBy) { return collection.OrderBy(orderBy); }

我如何保留一个lambda表达式的引用,该表达式稍后将传递给OrderBy或LoadWith函数?

我正在尝试创建一个访问数据库的通用方法。 这将意味着以下参数:页面索引,每页显示的项目数,订购选项,加载选项等。 … public IQuerable GetAll(int pageIndex, int itemsToDisplayPerPage, System.Linq.Expressions.Expression<Func>[] orderBy, System.Linq.Expressions.Expression<Func>[] loadOptions) { DataContext dc = null; IQuerable result = null; // Make some initalizations … foreach(var item in orderBy) { result = result.OrderBy(item); } System.Data.Linq.DataLoadOptions loadOptions = new System.Data.Linq.DataLoadOptions(); foreach(var item in loadOptions) { loadOptions.LoadWith(item); } … } … 问题是System.Linq.Expressions.Expression< Func >类型不是将为上述两个示例传递的任何lambda表达式的良好通用表示。 订购会因为对订单没有任何意义的对象类型而崩溃。 […]

编写扩展方法来调用控件的更好方法是什么?

我有这个通用函数来调用WinForm控件: public static void Invoke(this Control c, Action action) { if (c.InvokeRequired) c.TopLevelControl.Invoke(action); else action(); } 我正在考虑通过采用更严厉的限制来防止无意义的事情,使其变得更好,可能是这样的: button1.Invoke(() => list.Add(1)); 还可以进行冗余打字,例如: button1.Invoke(() => button1.Hide()); 因为我们已经指定this是button1 。 所以我做到了: public static void Invoke(this T c, Action action) where T : Control { if (c.InvokeRequired) c.TopLevelControl.Invoke(action); else action(c); } 现在我要打电话, button1.Invoke((c) => c.Hide()); 要么 button1.Invoke((c) => button1.Hide()); 现在我觉得即便如此,还有一些不仅仅是需要打字。 […]

LINQ lambda表达式替换字符串中的多个字符?

是否有可能编写一个lambda表达式,它将迭代对象数组并替换其中一个属性中的’X’,’Y’,”和’Z’的所有出现? 例如 return query.Select(x => { x.SomePropertyName= x.SomePropertyName.Trim().Replace(‘ ‘, “_”); return x; }).ToList(); 出于某种原因,当我需要替换多个字符时,上面的查询不会替换单个字符。 谢谢

C# – For循环和lambda表达式

我的问题是为什么我在lambda表达式中使用迭代器变量得到错误的结果。 好吧,我已经按照SWeko的回答了 。 但它对我不起作用这是我的伪代码: List list = new List(3); // where list.Count=3 for (int i=0;i Console.WriteLine (list[yy])); } 但控制台只写道 list[3] 三次,好像唯一的“yy”值是“i”的最后一个值似乎有效,因为在声明“yy”变量之前,控制台返回“i = 1”但它并不是真的,我不知道我在做什么。 谢谢你的建议!

返回LINQ时的c#异步

我刚刚意识到这段代码: public async Task<List> GetTitleReviews(int titleID) { using (var context = new exampleEntities()) { return await context.Reviews.Where(x => x.Title_Id == titleID).ToList(); } } …将无法工作,因为异步方法无法等待LINQ表达式。 我做了一些搜索,但只找到了一些过于复杂的解决方案。 如何将返回LINQ表达式的函数转换为异步版本?