Tag: linq to entities

如何获取IQueryable.Count的ToTraceString

我使用((ObjectQuery)IQueryable).ToTraceString()来获取和调整将由LINQ执行的SQL代码。 我的问题是,与大多数IQueryable方法不同,IQueryable.Count定义如下: public static int Count(this IQueryable source) { return (int)source.Provider.Execute( Expression.Call( typeof(Queryable), “Count”, new Type[] { source.ElementType }, source.Expression)); } 执行查询而不编译并返回IQueryable。 我想通过这样的方式来做这个伎俩: public static IQueryable CountCompile(this IQueryable source) { return source.Provider.CreateQuery( Expression.Call( typeof(Queryable), “Count”, new Type[] { source.ElementType }, source.Expression)); } 但是然后CreateQuery给了我以下exception: LINQ to Entities query expressions can only be constructed from instances that […]

如何确定是否在未加载相关记录的情况下设置entity framework中的导航属性

我不确定EF 4中的导航属性,所以我会请你解释一下。 让我们想象一下这种情况: 一个) 我有两个实体A和B ,其关系是N到N(多对多)和我的数据库A和B 树表以及带有两个外键的 AB 。 在这种情况下,EF创建一个导航属性,让我们称之为X ,也称为XReference 。 B) 我有两个实体A和B ,其关系为1到N(一对多), 两个表在我的数据库A和B 有一个外键 。 在这种情况下,EF创建一个导航属性,让我们称之为Y 但不是YReference 。 现在让我们采用场景A和B,并尝试找出B中是否有A的引用: 我的场景代码: 一个): bool isA = a.XReference.EntityKey != null; 我没有加载B记录(对吗?) B): bool isA = aBAny(x => x.BId == AId); 我加载B记录 我的问题: 为什么EF不创建YReference,我不能在场景B中使用EntityKey属性。 在我的代码场景B中,我真的不加载B的任何记录吗? 您是否知道更快速地运行此查询的方法? 谢谢你们的帮助,我希望我能说清楚:-)

如何为此ASP.NET DropDownList控件添加默认的“选择”选项?

我是一名新的ASP.NET开发人员,我正在尝试学习Linq-To-Entities。 我试图将DropDownList绑定到Linq语句,以检索状态实体中的状态列表。 一切都很好。 但是,我现在正在尝试向DropDownList添加“选择”选项,但它不适用于我。 你能告诉我怎么解决这个问题吗? ASP.NET代码: 代码隐藏: protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { DropDownList1.Items.Add(new ListItem(“Select”, “0”, true)); bindStatusDropDownList(); } } private void bindStatusDropDownList() { Status status = new Status(); DropDownList1.DataSource = status.getData(); DropDownList1.DataValueField = “ID”; DropDownList1.DataTextField = “Description”; DropDownList1.DataBind(); } 更新: 我也尝试在DropDownList的标记集中做,但它对我来说也不起作用

LINQ to Entities投影嵌套列表

假设这些对象…… class MyClass { int ID {get;set;} string Name {get;set;} List Things {get;set;} } class MyOtherClass { int ID {get;set;} string Value {get;set;} } 如何使用下面的投影执行LINQ to Entities Query,它会给我一个List? 这与IEnumerable工作正常(假设MyClass.Things是IEnumerable,但我需要使用List) MyClass myClass = (from MyClassTable mct in this.Context.MyClassTableSet select new MyClass { ID = mct.ID, Name = mct.Name, Things = (from MyOtherClass moc in mct.Stuff where […]

Generic Linq to Entitiesfilter方法,它接受要过滤的过滤条件和属性

我已经在SO中查看了许多通用的linq过滤问题及其答案,但它们都没有满足我的需求,所以我想我应该创建一个问题。 我已经创建了许多我称之为“filter提供程序”的类,一个用于我的模型中的每个实体类,以便为我的应用程序提供简单的搜索。 我不想进入像Lucene.Net这样的更高级的解决方案,因为具有匹配分数的基本过滤就足够了。 在这些提供者类的每个提供者类中,有多种方法将接收过滤术语和查询特定属性,并根据属性的相关性返回每个匹配的分数。 大多数方法会一次过滤多个属性,但不是全部。 以下是其中两种方法: private IQueryable MatchHighRelevanceFields(string searchTerm, IQueryable retailers) { var results = retailers.Where(r => (r.CompanyName != null && r.CompanyName.ToUpper().Contains(searchTerm)) || (r.TradingName != null && r.TradingName.ToUpper().Contains(searchTerm)) ); return results; } private IQueryable MatchMediumRelevanceFields(string searchTerm, IQueryable retailers) { var results = retailers.Where(r => (r.Address.Street != null && r.Address.Street.ToUpper().Contains(searchTerm)) || (r.Address.Complement != null && […]

从BinaryExpression到Expression <Func >

假设我有类似的东西 Expression<Func> left = x => x.SomeDateProperty; Expression<Func> right = x => dateTimeConstant; var binaryExpression = Expression.GreaterThan(left, right); Expression<Func> predicate = x => x.SomeDateProperty> dateTimeConstant; 1)如何使用binaryExpression替换最后一行赋值的binaryExpression ? var predicate = x => binaryExpression; 不起作用。 2) right总是一个常数,不一定是DateTime.Now。 它可能是一些更简单的Expression吗? 例如,它不依赖于SomeType,它只是一个常量。 3)如果我将GreaterThan作为string ,有没有办法从这个字符串到Expression具有相同名称的方法? 通常,如果比较方法的名称是以stringforms给出的,那么如何从字符串转到实际调用Expression类中具有相同名称的方法? 如果重要的话,它必须与LINQ to Entities一起使用。

使用linq到实体获取不同的记录

嗨我在我的应用程序中使用linq实体。 我需要根据一个列值“名称”获取不同的记录 所以我有一个类似于你可以看到的表: (User) ID Name Country DateCreated 我需要根据名称(唯一)选择所有这些项目但是uniques。 是否有可能使用linq,如果是这样,请告诉我如何。 var items = (from i in user select new {i.id, i.name, i.country, i.datecreated}).Distinct();

保存两个实体之间的关系和NN关联

我有一个带有poco对象的Entity Framework 4.0。 edmx模型文件是从数据库生成的。 这个datacontext是通过WCF服务访问的,它只是意味着我收到了一些对象,我需要将它们附加到当前的datacontext(或者用密钥对应重新加载它们)。 一切似乎工作正常,除了一个案例: 我在两个表之间有一个NN关系,所以我有一个关联表,除了两个表的ID之外没有任何字段: LINQ将此转换为以下架构,这似乎是正确的。 当我检索数据时没有问题,我自己插入Right_group的数据被正确地转换为“我的权利/群组集合中的新对象”。 但是,如果我尝试修改某些内容并保存,则无效 public void SaveRights(Group group, List rights){ //here, group and rights are objects attached to the database group.Rights.Clear(); group.Rights.AddRange(rights); _dataContext.SaveChanges(); } 所以我的问题是:如何保存这两个对象的“关系”? 谢谢!

你如何使用Linq到ADO.NETentity framework进行全文搜索(FTS)?

现在SQL Server 2008内置了全文搜索。我希望用它来支持我网站的搜索。 我也在考虑为我的ORM使用ADO.NETentity framework,但我想知道如何使用Linq到ADO.NETentity framework进行全文搜索(FTS)? 在ADO.NETentity framework中是否有任何支持,或者我是否坚持使用创建使用全文搜索谓词的函数的方法 ?

为什么Select,Where和GroupBy的这种组合会导致exception?

我有一个简单的服务表结构,每个服务都有很多设施。 在数据库中,这是一个Service表和一个Facility表,其中Facility表引用了Service表中的一行。 在我们的应用程序中,我们有以下LINQ工作: Services .Where(s => s.Facilities.Any(f => f.Name == “Sample”)) .GroupBy(s => s.Type) .Select(g => new { Type = g.Key, Count = g.Count() }) 但由于我无法控制的原因,源集在Where调用之前被投射到非实体对象,这样: Services .Select(s => new { Id = s.Id, Type = s.Type, Facilities = s.Facilities }) .Where(s => s.Facilities.Any(f => f.Name == “Sample”)) .GroupBy(s => s.Type) .Select(g => new { […]