草庐IT

c# - 返回 LINQ 结果时何时调用 ToList 的经验法则

我正在寻找在IEnumerables上调用ToList/ToArray/MemoizeAll(Rx)的经验法则,而不是在返回时返回查询本身IEnumerable的东西。我经常发现最好只返回查询并让调用者决定是否需要列表,但有时由于linq的懒惰特性,它可能会回来咬你一口。我想收集指南,例如:CallToListif:youcreatenewobjects(eg.inaselect)youhavesideeffectsinyourqueryOtherwise,returnthequery 最佳答案 首先,您永远不应该在查询中产生副作用

c# - list.Take(100).ToList() 与 list.GetRange(0,100)

Listattendees=newList();foreach...//Error:"Therearetoomanytargetusersintheemailaddressarray"//formorethan100attendees.Sotakethefirst100attendeesonly.if(attendees.Count>100)attendees=attendees.GetRange(0,100);//orif(attendees.Count>100)attendees=attendees.Take(100).ToList();由于我处理的列表总是长于100,并且总是取前

c# - 使用 ToList() 和 .AsQueryable() 连接两个不同的数据库上下文有什么区别?

案例1:我在两个上下文中通过ToList()方法加入了两个不同的数据库上下文。案例2:并且还尝试使用ToList()加入第一个Db上下文,然后使用AsQueryable()加入第二个。两者都对我有用。我只想知道这些连接在性能和功能方面的区别。哪一个更好?varusers=(fromusrindbContext.User.AsNoTracking()selectnew{usr.UserId,usr.UserName}).ToList();varlogInfo=(fromlogindbContext1.LogInfo.AsNoTracking()selectnew{log.UserId,l

c# - IEnumerable Where() 和 ToList() - 它们的实际作用是什么?

我想知道Where()到底是什么和ToList()方法在做。具体来说,我想知道Where()是否将在内存中创建一个新对象或返回一个新对象。好的,看下面的代码,假设我有一个框架日志类。publicclassLog(){publicstringLog{get;set;}publicstringCreatedByUserId{get;set;}publicstringModifiedUserId{get;set;}}在我的业务逻辑中,假设我只想要由特定用户创建或修改的日志。这将通过以下方法完成:FilterLogsAccordingToUserId().publicIEnumerableFi

c# - 如何停止 Resharper 在 Enumerable.ToList 和 Select 建议之间切换

如果我使用Resharper代码清理功能,我会找到我的代码......varpersonInfos=persons.Select(Mapper.Map).ToList();改为...varpersonInfos=Enumerable.ToList(persons.Select(Mapper.Map));但随后Resharper为Enumerable.ToList提出了“Toextensionmethodinvocation”的建议,因此代码返回到...varpersonInfos=persons.Select(Mapper.Map).ToList();我已经检查了Resharper代码

c# - 是否有使用查询语法在 LINQ 查询中执行 ToList 的巧妙方法?

考虑下面的代码:StockcheckJobs=(fromjobin(fromstockcheckIteminMDC.StockcheckItemswheredistinctJobs.Contains(stockcheckItem.JobId)groupstockcheckItembynew{stockcheckItem.JobId,stockcheckItem.JobData.EngineerId}intojobsselectjobs).ToList()letdate=MJM.GetOrCreateJobData(job.Key.JobId).CompletedJob.Valueord

c# - stack.ToList() – 元素顺序?

使用.ToList()时Stack上的扩展方法,结果是否与弹出每个元素并添加到新列表(与推送的相反)相同?如果是这样,这是因为它真的在遍历每个元素,还是它在内部反向存储元素并将数组滑入新的List中?? 最佳答案 Stack本身没有ToList方法,它是来自Enumerable的扩展方法类(class)。因为这些扩展方法只处理IEnumerable,可以安全地假设ToList迭代堆栈的项目以创建新列表(或者至少表现得像它会的那样-Enumerable方法有时会测试参数的类型并使用优化的实现)。有趣的是,文档似乎没有直接说明堆栈的枚举

c# - LINQ 查询上的 foreach() 速度慢 - ToList() 极大地提高了性能 - 为什么会这样?

我有点理解了整个延迟执行的概念,但下面的内容让我感到困惑......在包含大约1000行的DataTable上,我调用了AsEnumerable()。然后我选择返回到强类型类(1)的IEnumerable中的实体...这是我感到困惑的地方:我在集合上执行foreach循环;使用一堆Where()调用(2)从集合中的单个项目中选择东西......而且速度非常慢。DataTable.AsEnumerable().Select(r=>newObjectRepresentation{...});item.Where(i=>i.SomeEnum==SomeEnum.Something)...但是

c# - ToList() 方法在哪里? (可查询)

如果我尝试这样做,它会起作用:varquery=myContextObject.Users.Where(u=>u.Name=="John");query.ToList();我可以调用ToList和许多其他扩展方法。但如果我尝试这样做:publicListConvertQueryToList(IQueryablequery){returnquery.ToList();}ToList将无法访问,我猜这是因为ToList是一个扩展方法,但是ToList是怎么回事附在第一个例子中?在第二种情况下是否可以访问ToList? 最佳答案 你需要这

c# - Linq 中的 ToList 方法

如果我没记错的话,ToList()方法会迭代所提供集合的每个元素并将它们添加到List的新实例并返回此实例。假设一个示例//usinglinqlist=Students.Where(s=>s.Name=="ABC").ToList();//traditionalwayforeach(varstudentinStudents){if(student.Name=="ABC")list.Add(student);}我认为传统方式更快,因为它只循环一次,而上面的Linq为Where方法迭代两次,然后为ToList()方法迭代两次。我现在正在从事的项目广泛使用了列表,我看到有很多这样的ToLis