Tag: linq to sql

分组连续日期

我有一个List dates; 我有一个class级: class NonWorkingDay { public DateTime Start; public int Days; } 我试图想出一种干净的方式来分组它们。 public List GetContiguousDates(List dates) { } 注意:如果星期五有一个NWD,而下一个是星期一,则应对它们进行分组。 周末不被考虑。 例如,如果我有 September 3 2013 September 20 2013 September 23 2013 September 24 2013 September 30 2013 October 1 2013 输出将是: Start = September 3 2013, Days = 1 Start = September 20 2013, […]

为什么重用DataContext会对性能产生负面影响?

经过大量 研究和一些错误后 ,我修改了我的代码,以便每次查询数据库或插入数据时都会创建一个新的DataContext。 并且经常查询数据库 – 对于处理的250k个事务中的每一个,在插入事务之前,将查询数据库以获取客户ID,部门ID和类别。 所以现在我正在尝试优化代码,因为它每秒只处理大约15个事务。 我删除了一些无关的查询并添加了一些索引,并将其提高到30 /秒。 然后我想,尽管每个人都说DataContext是轻量级的,但是每个事务需要花费4倍的时间来创建一个新的,所以我尝试重用DataContext。 我发现,令我惊讶的是,重复使用上下文会导致性能降低到每秒10个事务! 为什么会这样呢? 是因为DataContext将实体缓存在内存中,并在查询数据库之前首先搜索其内存列表? 因此,例如,如果我正在寻找名为“MCS”的客户的客户ID(主键),并且客户名称列上有聚簇索引,以便数据库查询速度快,则内存中查找会慢吗? 创建/部署如此多的数据库连接是否会降低速度,或者这只是另一种过早的优化? 如果确实如此,是否有办法重用DataContext但是它为每个linq-to-sql查询执行实际的数据库查询?

如何使用LINQ to SQL创建通用数据访问对象(DAO)CRUD方法

我是LINQ to SQL的新手,并尝试为基本的创建,读取,更新和销毁(CRUD)方法创建通用数据访问对象(DAO),以便我可以重用代码。 我成功地创建了一个通用方法,它将使用下面的代码删除任何实体但是,我想知道是否有人知道如何创建一个通用方法,它将通过所有表中存在的公共Id字段选择任何实体。 /// /// Generic method that deletes an entity of any type using LINQ /// /// /// bool indicating whether or not operation was successful public bool deleteEntity(Object entity) { try { DomainClassesDataContext db = new DomainClassesDataContext(); db.GetTable(entity.GetType()).Attach(entity); db.GetTable(entity.GetType()).DeleteOnSubmit(entity); db.SubmitChanges(); return true; } catch(Exception ex) { Console.WriteLine(ex.StackTrace); return false; } } 我很确定相同的模式将适用于更新和插入,并希望在GenericDAO上有一个通用方法,它将根据实体Id检索我任何实体(即Customer,Invoice,WorkOrder等…)。 […]

如何从LINQ DataContext.SubmitChanges()获取TSQL查询

我正在使用Linq to SQL。 我有一个DataContext,我就是.SubmitChanges()。 插入标识字段时出错,我希望看到它用于插入此标识字段的查询。 我在快速监视器中看不到查询本身; 我在哪里可以从调试器中找到它?

从字符串映射枚举

我在数据库表中有一个字符串列,它在代码中映射到枚举。 在我的dbml文件中,当我将“Type”设置为MyTypes.EnumType时,我收到以下错误: 错误1 DBML1005:不支持类型’Table1’的列’EnumCol’中的DbType’VarChar(50)NOT NULL’和类型’MyTypes.EnumType’之间的映射。 这个问题: LINQ to SQL字符串到枚举表明我想要做的是可能的,但它是如何完成的?

创建一个公共谓词函数

首先,我不确定用什么术语来提出这个问题,这可能就是为什么我没有找到自己搜索的答案。 所以我正在使用Linq to SQL(C#,。Net 4),我希望得到一个符合条件的所有用户的列表,其基本内容我会做这样的事情: var users = DataContext.Users.Where(x => x.Criteria1 == “something”); 但是在这种情况下我想要匹配一些字段,事情是这些特殊字段是一个常见的检查,我希望能够创建一个专用函数,我可以在任何用户查询中使用它来检查这个比赛。 试着解释一下,让我们举一个例子:假设用户有5个标志,我想要一个常见的检查,看看是否设置了这些标志。 所以我可以这样写我的查询: var users = DataContext.Users.Where(x => x.Flag1 || x.Flag2 || x.Flag3 || x.Flag4 || x.Flag5); 但我想做的是分开“5旗检查”,这样我也可以在其他查​​询中使用它,最终我想使用类似的东西: var users = DataContext.Users.Where(x => x.Criteria1 == “something” && CheckForFlags(x)); 我通过这样的函数尝试了这个: static bool CheckForFlags(User user) { return user.Flag1 || user.Flag2 || user.Flag3 || user.Flag4 […]

NHibernate或LINQ to SQL

如果开始一个新项目,你将使用什么ORM NHibernate或LINQ以及为什么。 每种方法的优缺点是什么? 编辑:LINQ to SQL不只是LINQ(感谢@Jon Limjap)

LINQ to SQL查询以确定值是否以数字开头

我有一个项目,我通过第一个字母查询用户: repository.GetAll().Where(q => q.BrukerIdent.StartsWith(letter.ToString())).ToList(); ..where repository.GetAll()返回一个IQueryable , BrukerIdent是一个包含用户名的字符串,而letter是一个char值。这很有效,除了我还希望得到以数字开头的用户。 而且我不想按单独的数字排序。 我的头脑为StartsWith(“\d”)大喊大叫,但据我发现,它不会以这种方式工作。 我还想过做一个10路OR条款,但这看起来像意大利面条,我不确定效率。 有没有“正确”的方式这样做?

在存储库模式中加载子记录

使用LINQ TO SQL作为基于存储库的解决方案的基础。 我的实现如下: IRepository FindAll FindByID Insert Update Delete 然后我有扩展方法,用于查询结果: WhereSomethingEqualsTrue() … 我的问题如下: 我的用户存储库有N个角色。 我是否创建了角色存储库来管理角色? 我担心如果我走这条路,我最终会创建几十个存储库(每个表1个,几乎除了连接表)。 每个表的存储库是否常见?

如何检索在linq中使用所有提供的标签标记的项目?

我似乎遇到了麻烦。 我有一个带有ID的Task表和一个Tag表,它有一个标记字段和一个外键约束到任务表。 我希望能够通过标签执行AND搜索任务。 因此,例如,如果我搜索带有“可移植性”和“测试”标签的任务,我不希望任务标记为“可移植性”而不是“测试”。 我尝试了以下语法: var tasks = (from t in _context.KnowledgeBaseTasks where t.KnowledgeBaseTaskTags.Any(x => tags.Contains(x.tag)) select KnowledgeBaseTaskViewModel.ConvertFromEntity(t) ).ToList(); 这当然是OR搜索,而不是AND搜索。 我无法弄清楚如何将其切换为AND搜索。 编辑我还需要能够搜索任务包含的X标签中的2个。 因此,如果任务标记为“bugfix”,“可移植性”,“测试”并且我搜索“测试”和“可移植性”,那么该任务仍将显示。