Tag: iqueryable

ICollection上的AsQueryable()是否真的会执行延迟执行?

我正在使用Entity Framework CodeFirst,我使用ICollection作为父子关系 public class Person { public string UserName { get;set} public ICollection Blogs { get; set;} } public class Blog { public int id { get; set; } public string Subject { get; set; } public string Body { get; set; } } 好吧,到目前为止一切正常,但我担心的是,每当我想得到一个人的博客时,我就把它当作 var thePerson = _context.Persons.Where(x => x.UserName = ‘xxx’).SingleOrDefault(); var […]

EntitySet 的“结果视图”在哪里?

查看LINQ to SQL映射实体的链接EntitySet时,我看到以下内容: 我想看到以下内容(通过使用.AsQueryable()扩展方法实现),以便我可以单击小刷新图标并查看内容: 为什么我不能在常规的纯EntitySet上看到结果视图? 另外,我注意到在这个MSDN页面上它说: 在LINQ to SQL中, EntitySet类实现IQueryable接口。 从我所看到的, EntitySet不inheritanceIQueryable和IQueryable 。 那么这个主张怎么了?

可以意外地评估LINQ to SQL IQueryable吗?

我正在编写一些代码,它采用LINQ to SQL IQueryable并进一步添加动态生成的Where子句。 例如,这里是其中一个方法的骨架: IQueryable ApplyContains(IQueryable source, string field, string value) { Expression<Func> lambda; … dynamically generate lambda for p => p..Contains(value) … return source.Where(lambda); } 我可以将这些方法中的几个链接在一起,并使用Skip / Take页面完成。 我是否正确地认为,当最终评估IQueryable时,如果lambda表达式中有任何内容无法转换为SQL,则会抛出exception? 特别是我担心我可能会意外地做一些会导致IQueryable提前评估然后继续在内存中进行评估的事情(从而吸引成千上万的记录)。 从我读过的一些事情我怀疑IQueryable不会像这样早期评估。 有谁能确认一下吗?

IQIeryable to List

我知道IQueryable不会产生任何结果,只是一个表达式构建器,我的问题是如何实际使用它来执行查询并将集合作为List返回以便能够在网格上绑定它。 IQueryable query = _campaignManager.GetCampaign(filter, values); // this line returns error List campaigns = query.Cast().ToList(); grdCampaigns.DataSource = campaigns; grdCampaigns.DataBind(); 其他细节:GetCampaign() public IQueryable GetCampaign(string filter, params object[] values) { string parameters = string.Empty; foreach (object obj in values) { parameters += obj.ToString() + “,”; } parameters.Remove(parameters.Count() – 1, 1); var query = context.Campaigns.Where(filter, parameters) .Select(“new(CampaignID,CampaignName)”); return […]

如何公开具有OData服务的派生类和成员的多层模型?

我正在尝试公开一个可用于OData服务的模型。 我目前采取的方法是: 1)在模型中定义一个类以公开IQueryable集合,例如: public class MyEntities { public IQueryable Customers { get { return DataManager.GetCustomers().AsQueryable(); } } public IQueryable Users { get { return DataManager.GetUsers().AsQueryable(); } } } 2)使用可查询的集合类设置WCF DataService ,例如: public class MyDataService : DataService { public static void InitializeService(DataServiceConfiguration config) { config.SetEntitySetAccessRule(“Customers”, EntitySetRights.All); config.SetEntitySetAccessRule(“Users”, EntitySetRights.All); config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2; } } 我用这种方法遇到了3个问题和/或限制: 1)我无法将任何派生类集合添加到IQueryable列表中。 2)我必须应用IgnoreProperties属性来隐藏从基类型派生的任何成员。 […]

如何制定IQueryable来查询递归数据库表?

我有一个像这样的数据库表: Entity ——————— ID int PK ParentID int FK Code varchar Text text ParentID字段是一个外键,同一个表中有另一个记录(递归)。 所以结构代表一棵树。 我正在尝试编写一个方法来查询此表,并根据路径获取一个特定的实体。 路径将是表示实体的Code属性和父实体的字符串。 因此,示例路径将是”foo/bar/baz” ,这意味着Code == “baz”的一个特定实体,父Code == “bar”和父Code == “foo”的父Code == “foo” 。 我的尝试: public Entity Single(string path) { string[] pathParts = path.Split(‘/’); string code = pathParts[pathParts.Length -1]; if (pathParts.Length == 1) return dataContext.Entities.Single(e => e.Code == code && e.ParentID […]

如何维护LINQ延迟执行?

假设我有一个IQueryable表达式,我想封装它的定义,存储它并重用它,或者稍后将它嵌入到更大的查询中。 例如: IQueryable myQuery = from foo in blah.Foos where foo.Bar == bar select foo; 现在我相信我可以保留myQuery对象并像我描述的那样使用它。 但有些事情我不确定: 如何最好地参数化它? 最初我在方法中定义了这个,然后返回IQueryable作为方法的结果。 这样我就可以将blah和bar定义为方法参数,我猜它每次都会创建一个新的IQueryable 。 这是封装IQueryable逻辑的最佳方法吗? 还有其他方法吗? 如果我的查询解析为标量而不是IQueryable怎么办? 例如,如果我希望此查询完全如所示,但附加.Any() ,只是让我知道是否有任何匹配的结果? 如果我添加(…).Any()然后结果是bool并立即执行,对吧? 有没有办法利用这些Queryable运算符( Any , SindleOrDefault等)而不立即执行? LINQ-to-SQL如何处理这个问题? 编辑:第2部分更多的是试图了解IQueryable.Where(Expression<Func>)与IQueryable.Any(Expression<Func>)之间的限制差异IQueryable.Any(Expression<Func>) 。 在创建要延迟执行的大型查询时,似乎后者并不灵活。 可以附加Where() ,然后可以随后附加其他构造,然后最终执行。 由于Any()返回标量值,因此它听起来会在构建其余查询之前立即执行。

确定是否已订购IQueryable

有没有办法知道是否已经订购了IQueryable (使用OrderBy或OrderbyDescending )? 所以我知道是否在集合上调用OrderBy或ThenBy 。 IQueryable contacts = Database.GetContacts(); 我试过contacts is IOrderedQueryable ,但它总是如此。 编辑 :我刚刚改变了我的例子,前一个并没有真正表明我的观点。 假设GetContacts使用Entity Framework并简单地返回表的所有记录。 稍后,我将几个函数应用于contacts ,我不知道这些函数的作用。 他们可以对IQueryable进行排序或过滤。 当我收回集合时,我需要再次对它进行排序。 为此,我需要知道是否需要调用OrderBy或ThenBy 。 因此,如果已经对整个集合进行了排序,我不会重新排序。

将谓词转换为表达式<Func >

有可能以某种方式将Predicate to Expression<Func>转换Predicate to Expression<Func>吗? 我想使用我的ICollectionView的filter来使用下一个IQueryable函数: public static System.Linq.IQueryable Where(this System.Linq.IQueryable source, System.Linq.Expressions.Expression<System.Func> predicate) 谢谢

Dynamic Func <IQueryable ,IOrderedQueryable >表达式

我正在使用这里提到的模式http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-the-repository-and-unit-of-work-patterns-in- AN-ASP净MVC应用程序 我正在使用下面的方法来查询EF public virtual IEnumerable Get( Expression<Func> filter = null, Func<IQueryable, IOrderedQueryable> orderBy = null, string includeProperties = “”) { IQueryable query = dbSet; if (filter != null) { query = query.Where(filter); } foreach (var includeProperty in includeProperties.Split (new char[] { ‘,’ }, StringSplitOptions.RemoveEmptyEntries)) { query = query.Include(includeProperty); } if (orderBy != null) { […]