Tag: linq

在C#中动态解压缩IEnumerable或最佳替代方案

让我们假设您有一个函数返回一个延迟枚举的对象: struct AnimalCount { int Chickens; int Goats; } IEnumerable FarmsInEachPen() { …. yield new AnimalCount(x, y); …. } 您还有两个使用两个独立IEnumerable的函数,例如: ConsumeChicken(IEnumerable); ConsumeGoat(IEnumerable); 如何在没有a)事先转换FarmsInEachPen() ToList()的情况下调用ConsumeChicken和ConsumeGoat ,因为它可能有两个zillion记录,b)没有multithreading。 基本上: ConsumeChicken(FarmsInEachPen().Select(x => x.Chickens)); ConsumeGoats(FarmsInEachPen().Select(x => x.Goats)); 但是没有强制双重枚举。 我可以使用multithreading来解决它,但是每个列表的缓冲队列都会变得不必要地复杂化。 所以我正在寻找一种方法将AnimalCount枚举器分成两个int枚举器而不完全评估AnimalCount 。 在锁步中一起运行ConsumeGoat和ConsumeChicken没有问题。 我能够完全理解解决方案,但我并不在那里。 我正在考虑一个辅助函数,它返回一个IEnumerable被输入到ConsumeChicken ,每次使用迭代器时,它在内部调用ConsumeGoat ,从而在锁步中执行这两个函数。 当然,除了我不想多次打电话给ConsumeGoat ..

为什么在LINQ中使用First而不是FirstOrDefault?

可能重复: 何时使用.First和何时使用.FirstOrDefault和LINQ? 当您可以使用FirstOrDefault运算符时,在LINQ中使用First运算符有什么意义? var q = results.First(); // Error if empty

使用LINQ合并2个列表并汇总多个属性

我有一个包含以下属性的类: public class SomeClass() { public Int32 ObjectId1 {get;set;} public Int32 ObjectId2 {get;set;} public Int32 ActiveThickeness {get;set;} public Int32 ActiveFilterThickness {get;set;} } 我还有2个列表: List A List B 列表A有数据: | ObjectId1 | ObjectId2 | ActiveThickness | ActiveFilterThickness | ——————————————————————- | 1 | 3 | 50 | 0 | —————————————————————— | 1 | 2 | 400 | […]

使用linq在foreach内部时,数据库被锁定而没有ToList()

我试过寻找答案却找不到答案。 ‘问题’很简单: 如果我有一个使用linq的项目集合如下: var items = db.AnyTable.Where(x => x.Condition == condition).ToList(); 使用linq但没有ToList()另一个项集合: var items2 = db.AnyTable.Where(x => x.Condition == condition); 如果现在我尝试使用foreach迭代每个项目(我没有尝试使用或其他类型的迭代方法): foreach (var item in items) { int i = 2;// Doesn’t matter, The important part is to put a breakpoint here. } 如果我在断点处停止代码并尝试更新SQL Management Studio上的AnyTable ,一切正常。 如果!: foreach (var item in items2) { int […]

类型’System.Int32’的表达式不能用于方法’Boolean Equals(System.Object)’的’System.Object’类型的参数

我有一个常见的网格视图列筛选器方法,使用ColumnName和SearchText明智地筛选网格视图记录。 这里当我在nullable int datacolumn上运行时,从这个方法抛出错误,如: 类型’System.Int32’的表达式不能用于方法’Boolean Equals(System.Object)’的’System.Object’类型的参数 我的方法代码是: public static IQueryable FilterForColumn(this IQueryable queryable, string colName, string searchText) { if (colName != null && searchText != null) { var parameter = Expression.Parameter(typeof(T), “m”); var propertyExpression = Expression.Property(parameter, colName); System.Linq.Expressions.ConstantExpression searchExpression = null; System.Reflection.MethodInfo containsMethod = null; // this must be of type Expression to accept different […]

如何使用Group by在Linq语句中引入Let关键字

我有以下带有’group by’子句的Linq语句,并且想知道如何引入let或任何其他语句以避免重复子查询lifecycleEvents.Where(i => i.LifecycleEventId == grouping.Key).First()以下示例中的lifecycleEvents.Where(i => i.LifecycleEventId == grouping.Key).First() var completionTimeModels = from timeline in processTimelines group timeline by timeline.LifecycleEventId into grouping select new CompletionTimeViewModel() { // How to avoid repeating the same query to find the life cycle event? Name = lifecycleEvents.Where(i => i.LifecycleEventId == grouping.Key).First().LifecycleEventName, DisplayName = lifecycleEvents.Where(i => i.LifecycleEventId == grouping.Key).First().LifecycleEventDisplayName […]

Enumerable.Empty ()AsQueryable已(); 此方法支持LINQ to Entities基础结构,不应在代码中直接使用

我收到运行时错误 此方法支持LINQ to Entities基础结构,不应在代码中直接使用。 描述:执行当前Web请求期间发生未处理的exception。 请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。 exception详细信息:System.InvalidOperationException:此方法支持LINQ to Entities基础结构,不应在代码中直接使用。 我试图通过在所有搜索字段上添加所有匹配的记录(将执行OR而不是AND )来生成查询而不是对每个搜索条件进行过滤。 public static IQueryable ApplySearch(this IQueryable queryable, SearchModel search) where T : class { var results = Enumerable.Empty().AsQueryable(); if (search != null) { if (search.PolicyNumber.HasValue && typeof (IPolicyNumber).IsAssignableFrom(queryable.ElementType)) { results = results.Union(queryable.SearchByPolicyNumber(search)); } if (search.UniqueId.HasValue && typeof (IUniqueId).IsAssignableFrom(queryable.ElementType)) { results = results.Union(queryable.SearchByUniqueId(search)); } if (!string.IsNullOrWhiteSpace(search.PostCode) […]

使用具有IEnumerable的Lambda表达式树

我一直在努力学习更多关于使用Lamba表达式树的知识,因此我创建了一个简单的例子。 这是代码,如果作为C#程序粘贴,这可以在LINQPad中使用。 void Main() { IEnumerable list = GetUsers().Where(NameContains(“a”)); list.Dump(“Users”); } // Methods public IEnumerable GetUsers() { yield return new User{Name = “andrew”}; yield return new User{Name = “rob”}; yield return new User{Name = “chris”}; yield return new User{Name = “ryan”}; } public Expression<Func> NameContains(string namePart) { return u => u.Name.Contains(namePart); } // Classes public […]

在View中创建HiddenFor IEnumerable

我有一个IEnumerable属性 public IEnumerable ChangesOthersResult { get; set; } 我需要从ChangesOthersResult收集所有值并从视图发回到控制器。 我如何遍历Ienumerable并创建将绑定回控制器中的ViewModel的隐藏字段? foreach(var item in Model.ChangesOthersResult) { @Html.HiddenFor(x => x.ChangesOthersResult); } 给我Raw SQL语句作为文本。

使用LINQ和LINQ扩展计算Dictionary中的值

我有一个字典看起来像这样: Dictionary<String, List> test1 : 1,3,4,5 test2 : 2,3,6,7 test3 : 2,8 如何使用LINQ和LINQ扩展计算所有值?