Tag: entity framework

如何知道OrderBy是否应用于查询?

我需要知道在应用.Skip或.Take之前是否将OrderBy应用于Linq查询。 我无法控制收到的查询,如果应用了OrderBy,我需要维护这个,在任何其他情况下我应该OrderBy(t => true)。 我尝试过以下方法: DataContext db; var query = db.Orders; var wasOrderByApplied = typeof(IOrderedQueryable).IsAssignableFrom(query.AsQueryable().Expression.Type); var wasOrderByApplied2 = query.AsQueryable().Expression.Type == typeof(System.Data.Entity.Core.Objects.ObjectQuery); var wasOrderByApplied3 = typeof(IOrderedQueryable) == query.AsQueryable().Expression.Type; var query2 = db.Orders.OrderBy(o => o.CreationDate); var wasOrderByApplied4 = typeof(IOrderedQueryable).IsAssignableFrom(query2.AsQueryable().Expression.Type); var wasOrderByApplied5 = query2.AsQueryable().Expression.Type == typeof(System.Data.Entity.Core.Objects.ObjectQuery); var wasOrderByApplied6 = typeof(IOrderedQueryable) == query2.AsQueryable().Expression.Type; var query3 = db.Orders.OrderBy(o => o.CreationDate).Where(o […]

使用entity framework在列表中获取行索引

我的列表中有5个数据。 我的列表 所以我想知道,我怎样才能选择Id的行号? var MyProductId= 135; var SelectedDataRowNumber = context.SP_MyList.ToList() .Where(s=>s.Id==MyProductId) .FirstOrDefault(); 例如,My List有5个数据如下, Id-Name 6,Computer 135,KeyBoard 68,Mouse 98,Telephone 213,Laptop, MyProductId是135因此它与Keyboard匹配。行数(索引)必须为“1”,因为0是计算机。 我怎样才能选择Id的行数(索引)数?

Linq到EF – 不支持的function

我正在使用Linq进行查询,由Entity Framework数据源提供支持。 我收到以下错误: LINQ to Entities无法识别方法’Double Sqrt(Double)’方法,并且此方法无法转换为存储表达式。 这是我的函数的简化版本(我的版本更复杂,使用ACos,sin,cos和其他C#Math类函数)。 var objects = from n in context.Products.Where(p => pr == r) let a = Math.Sqrt((double)n.Latitude) where a < 5 orderby a select n; return objects.Take(100).ToList(); 我认为问题可能与Linq to EF(和SQL数据源)与Linq to SQL相比具有有限的受支持function集的情况有关。 我对此比较陌生,所以我不是百分百肯定。 任何人都可以给我指向正确的方向吗? 干杯,

LINQ包含在一对多的.Where()无法正常工作?

我正在尝试查询用户,包括每个用户的兴趣,但仅限于兴趣符合特定条件的情况: return db.Users.Include(u => u.Interests.Where(s => s.TenantId == tenantId)) 但是我收到一个错误: Include路径表达式必须引用在类型上定义的导航属性。 使用虚线路径作为参考导航属性,使用Select运算符作为集合导航属性。 我玩的想法是把外面的东西推到外面,但却无法让它发挥作用。

DataGridView使用c#成为Linq的ReadOnly

我正在使用带有entity framework工作的C#(Windows窗体)和Linq实现一个系统。 使用普通linq语句时, DataGridView运行良好,但当我使用“Join”时, DataGridView变为只读,我无法编辑任何内容。 示例:DataGridView适用于此语句: var query = from d in db.Device select d; dgvDevices.DataSource = query.ToList(); 但它使用此查询变得不可编辑: var query = from u in db.Users join d in db.Device on u.id equals d.AssignedTo select new { d.id, d.Name, d.OwnerName, d.OwnerPhoneNumber, d.Details, User = u.Name }; dgvDevices.DataSource = query.ToList();

EF 6.1 Code First中不同主键的一对一关系

我在使用Entity Framework 6.1从PayGroup对象获取对employee对象的引用时遇到问题。 我在PayGroup.SupervisorId – > Employee.EmployeeId的数据库中有一个外键。 请注意,这是一个零或一对一的关系(薪资组只能有一个主管,一个员工只能是一个薪酬组的主管)。 根据GitHub上的这篇文章,在具有不同主键的表上不可能有外键。 我已经手动将外键添加到数据库中,但我无法弄清楚如何设置流畅的api映射以便能够从薪酬组中获取员工对象。 薪酬组表 员工表 注意:PayGroup.SupervisorId中有一个外键 – 数据库中的Employee.EmployeeId。 下面是DTO(我目前在这些类之间没有任何工作关系映射): public class PayGroup { public int Id { get; set; } public string SupervisorId { get; set; } public virtual Employee Supervisor { get; set; } } public class Employee { public string EmployeeId { get; set; } public […]

通过entity framework将int数组传递给T-SQL存储过程

我阅读了很多post并认为我理解了这些概念,但是我的一小部分内容未能从C#/ EF模块传递到SQL Server存储过程。 希望其他人可以发现问题所在。 我正在使用EF6,4.5 .Net Framework,SQL Server 2014 在数据库中我创建了这些类型/过程: CREATE TYPE [dbo].[IntsTTV] AS TABLE( [Id] [int] NOT NULL ) 请注意,名为“Person”的表存在列’Id’(int)和’LastName’(nvarchar),并且具有数据。 CREATE PROCEDURE [dbo].[GetUsers] @UserIds dbo.IntsTTV READONLY AS BEGIN SELECT p.LastName FROM [dbo].[Person] p INNER JOIN @UserIds ids On p.Id = ids.Id; END // C#代码 SqlMetaData[] columns = new SqlMetaData[1]; columns[0] = new SqlMetaData(“Id”, SqlDbType.Int); […]

如何使用Identities列表从Entity Framework获取ObjectResult

我有一个HashSet的Identity值,我需要将其用作查询值以从Entity Framework返回ObjectResult 这是HashSet: HashSet officeIds = new HashSet(); 这是我试图或多或少地运行的查询: ObjectResult offices = ctx.FilingOffice.Where(office => office IN officeIds.ToList()); 上面的“office => office IN officeIds.ToList()”部分是我无法工作的,并且在给定主键列表的情况下没有在Web上找到任何用于返回对象的样本。 ctx是System.Data.Objects.ObjectContext

entity framework列表包含在lambda中

我想使用特定ID查询项目。 例如: var ids = new List { 1, 3, 5 }; var items = context.Items.Where(item => ids.Contains(item.ID)).ToList(); 问题: 这会使用SQL IN运算符生成单个查询吗? 这个代码在性能方面是否可以? 有没有更好的方法呢? 我正在使用Entity Framework 6和Microsoft SQL Server。

动态转换以避免C#语法错误

请考虑以下数据库表(SQL Server 2005)。 我想在EF(v6,.net 4.5.1)中使用它与翻译function,但搜索后似乎不支持。 CREATE TABLE Foo ( pk INT NOT NULL PRIMARY KEY, Foo VARCHAR(100) ) 使用按惯例映射,该映射将使用C#语法不支持的属性Foo创建类Foo 。 我尝试使用ColumnAttribute : public partial class Foo { [Key] public virtual int pk {get;set;} [Column(“Foo”)] public virtual string Name {get;set;} } 这似乎工作,但我想通过存储过程和MARS使初始页面请求加载数据(并使用通用结构,以便我可以在其他页面上重用它),所以我调用存储过程并循环通过结果集,通过reflection调用ObjectContext.Translate (类似于下面,但这是缩写): var methTranslate = typeof(ObjectContext).GetMethod(“Translate”, new[] { typeof(DbDataReader), typeof(string), typeof(MergeOption) }); foreach (var className […]