所以我试图理解IQueryable.我正在阅读的教程建议使用它,但不确定为什么。该代码仅使用LINQtoSQL返回一些值。我过去做过很多次,但没有使用IQueryable为什么要将它与返回超过1个值的函数一起使用?这是我的代码:publicIQueryableGetItems(){returnfromitemindb.Itemswhereitem.IsActive==trueorderbyitem.ItemNumberselectitem;} 最佳答案 IQueryable将查询表示为表达式树,而不在服务器上对它求值。这使您可以在实
在我的查询中,我需要返回IEnumerable但我不知道此操作是否使查询再次执行?vardata=Repository.Find().AsEnumerable();Find()返回IQueryable因为IQueryable继承IEnumerable.我怀疑AsEnumerable进行重复执行。我知道vardata=Repository.Find().ToList()执行查询两次。一个用于Find()第二个是Tolist() 最佳答案 IQueryable是IEnumerable。没有转换,因此没有任何类型的工作在进行。当您显式调用
我正在编写一个函数,该函数使用LINQ从数据库中提取记录以获取IQueryable。此LINQ语句将提取特定时间段内活跃用户的所有记录,然后将用户ID、名字和姓氏输出到TelerikRadGrid。我的问题在于在拉取此数据时尝试在UserID上获取不同的值。我尝试重新编写此代码以获得我的结果。这是提取所有数据的代码示例,其中Distinct不工作。publicstaticIQueryableGetActiveEmployees_Grid(stringPeriod){DataContextData=newDataContext();varEmployees=(fromcinDataSys
在ASP.netMVC4RC的Web-api中,我像以前一样定义了一个Get操作:publicIQueryableGet(){varlst=ctx.GetListFromDB();returnlst.AsQueryable();}如果我调用如下url,我之前运行它时:/api/people?$inlinecount=allpages&$format=json&$top=50&$filter=(State+eq+'AL'+and+Zip+eq+'35242')它会对对象进行过滤,自测试版以来是否发生了某些更改会破坏此功能? 最佳答案
考虑以下代码:IQueryablequeryable;//somethingtoinstantiatequeryablevarenumerable=(IEnumerable)queryable;varfiltered=enumerable.Where(i=>i>3);在最后一行,调用了哪个扩展方法?是IEnumerable.Where(...)吗?或者将IQueryable.Where(...)被调用是因为实际的实现显然仍然是可查询的?大概理想的情况是调用IQueryable版本,就像普通多态性将始终使用更具体的覆盖一样。虽然在VisualStudio中,当我右键单击Where方法并“
我有一个对象图,我正在使用EFCodeFirst和AutoMapper从数据库加载到DTO:-publicclassFoo{publicintId{get;set;}publicvirtualICollectionBars{get;set;}}publicclassBar{publicintId{get;set;}publicintFooId{get;set;}publicvirtualFooFoo{get;set;}publicstringName{get;set;}publicintSortOrder{get;set;}}publicclassFooDto{publicIEnume
我正在我的GridView中实现分页。来自this文章,我需要两种方法:publicIQueryableBindEmployees(intstartRowIndex,intmaximumRows){EmployeeInfoDataContextdbEmp=newEmployeeInfoDataContext();varquery=fromempindbEmp.EmployeesjoindeptindbEmp.Departmentsonemp.DeptIDequalsdept.DeptIDselectnew{EmpID=emp.EmpID,EmpName=emp.EmpName,Age=
看完this题,我需要弄清楚一些事情。IQueryablecusts=fromcindb.Customerswherec.City==""selectc;IEnumerablecusts=fromcindb.Customerswherec.City==""selectc;问题:1)可以这样说吗:在第一个查询中,SQLServer正在运行整个操作,包括where子句并返回ONLY相关行-而第二个查询执行SELECT*...并将所有行返回到C#和THEN过滤器中?2)如果我仅在内存中有一个集合怎么办。(varlstMyPerson=newList())IQueryablelst=fromc
更新2013-08-22:看完“构建IQueryable提供程序系列”(感谢链接!)之后,我走了一些。我相应地更新了代码。它仍然没有完全正常工作。如果我正确理解了本教程,则在请求多个元素的情况下会调用GetEnumerator(例如,通过可查询的ToList()调用或任何聚合函数)。因此,包装程序的所有GetEnumerator实现都需要在提供程序上调用Execute并传递可查询对象的表达式。在其他情况下,如果仅请求单个元素,则直接调用Execute。查询对象的表达式还反射(reflect)了它是用于单个还是多个元素。这样对吗?不幸的是,现在在源查询提供程序上调用Execute时,我收
我读过一些文章,指出IEnumerable用于模拟存储过程或限制您的数据库。失去了对外部提供商的延迟加载能力。IQueryable为开发人员提供了更大的灵active。那里有延迟加载。就性能而言,两者都消耗大量性能..那么哪个更可取? 最佳答案 从RepositoryPattern的角度,可以这样想:如果您想一次性将整个列表传递给客户端,请使用预加载IEnumerable。他们仍然可以添加linq子句,但客户端不会从延迟执行中受益。如果您希望通过允许客户端添加自己的linq子句将延迟查询功能扩展到客户端,请使用延迟加载IQuerya