Tag: linq to sql

在SQL Server 2008中的NVarChar中存储UTF-8时遇到问题

我正在从网站上使用System.Net.WebClient提取数据,当数据返回时,除了带重音的字母外,所有内容都会解析并且看起来很好。 例如,当它返回é ,SQL Server 2008将其保存为é 。 只需要弄清楚如何将这些UTF-8字符转换为SQL Server可以读取的内容。 我将它存储在NVARCHAR(MAX)数据类型中。 如果你好奇,我正在使用Linq-to-SQL插入数据库。 有什么想法,我可以做到将其转换为正确的格式?

LinqToSQL足够强大吗? 是不是更强大但同样流畅的界面易于构建?

在上一个问题中,我询问ORM库是否是次优解决方案并获得了很多很好的反馈。 正如我对这个问题的进一步思考,我得出的结论是LinqToSQL(现在)的主要好处和LinqToEntities(未来)的承诺在于它们能够减少程序代码和SQL之间的“不匹配”。 鉴于LinqToSQL作为一种完整的数据查询语言的局限性,我不倾向于认为它的优势远不止于此,但我想了解其他人的意见。 首先,程序代码和SQL之间的“不匹配”是什么意思? 如果您曾经开发过数据库应用程序,那么您可能已经熟悉(并且厌倦)与数据库交互所需的步骤:设置所有参数,输入SQL命令,然后将预期结果手动转换回变量或代码中使用的实例。 通过使用“流畅”接口,lambda表达式,扩展方法等,LinqToSql使这变得更加容易。最终结果是,很容易将本机C#标量类型推送到数据检索调用中,并且很容易自动生成本机C#类实例。 以MS网站为例: var q = from c in db.Customers where c.City == “London” select c; foreach (var cust in q) Console.WriteLine(“id = {0}, City = {1}”,cust.CustomerID, cust.City); 很酷! 那么问题是什么? 好吧,正如我在顶部链接的文章中指出的那样,存在许多问题。 对我来说最大的一点是,任何能够在SQL方面做到最低限度的人都会立即遇到障碍。 不仅仅是因为SQL的替代品而创建的许多构造都不熟悉甚至是笨拙的(Group By?我们在LinqToSql中谈论丑陋 )。 更大的问题是有许多常见的构造本身不受支持(例如DateDiff)。 充其量,您可以将Linq的“逃出”并将SQL代码提交到Linq调用流中。 那么,简单地在C#(或VB)中嵌入SQL是不是更好,这种方式允许您自由地声明SQL,但是这也可以让您轻松参数嵌入并自动转换为本机类? 例如,如果我们在一个类中只实现六个函数,我们可以编写类似这样的东西(其中qry是我们的查询类的一个实例): var ListOfEnrollees = qry.Command(“Select b.FirstName, b.LastName, b.ID From ClassEnroll a inner join […]

在LINQ中将字符串转换为datetime值

假设我有一个表以String格式存储日期时间列表(yyyyMMdd)。 我如何提取它们并将它们转换为DateTime格式dd / MM / yyyy? 例如20120101 – > 01/01/2012 我尝试过以下方法: var query = from tb in db.tb1 select new { dtNew = DateTime.ParseExact(tb.dt, “dd/MM/yyyy”, null); }; 但事实certificate错误说ParseExact函数不能被复原。

LINQ与OR联接

我想使用OR语句与LINQ进行JOIN。 这是我开始的SQL查询: SELECT t.id FROM Teams t INNER JOIN Games g ON (g.homeTeamId = t.id OR g.awayTeamId = t.id) AND g.winningTeamId != 0 AND g.year = @year GROUP BY t.id 我无法将该ON子句转换为LINQ。 这就是我所在的地方: var y = from t in db.Teams join g in db.Games on t.ID equals g.AwayTeamID //missing HomeTeamID join where g.WinningTeamID != 0 && […]

我应该如何使用IoC /dependency injection处理我的实体/域对象?

我目前正在使用PLINQO从数据库生成我的所有实体。 最近,我开始使用StructureMap进行dependency injection,并将其作为“分离我的顾虑”的学习过程的一部分。 我注意到所有生成的Entity类都包含使用EntitySet的高度耦合属性,EntitySet是LINQ的一部分,它使我的实体依赖于使用System.Data.Linq。 我想继续使用我的PLINQO生成实体,但与此同时,我觉得我应该生成某种基类/仅数据对象,甚至可能将它们移动到不同的程序集中,然后使用某种自动映射器可根据需要在两者之间进行转换。 最好(或最糟糕的,取决于你如何看待它),我想要一些接口来表示这些,以便我可以在以后注入不同的具体类型。 这有点矫枉过正吗? 最终,我将不再使用SQL Server直接使用Web服务,我怀疑这些EntitySets会轻易地通过网络。 有没有人有一些很好的例子来处理这样的场景? TIA

Linq-to-Sql:递归获取子项

我有一个Comment表,它有一个CommentID和一个ParentCommentID。 我想获得评论中所有孩子的清单。 这是我到目前为止,我还没有测试过。 private List searchedCommentIDs = new List(); // searchedCommentIDs is a list of already yielded comments stored // so that malformed data does not result in an infinite loop. public IEnumerable GetReplies(int commentID) { var db = new DataClassesDataContext(); var replies = db.Comments .Where(c => c.ParentCommentID == commentID && !searchedCommentIDs.Contains(commentID)); foreach (Comment reply […]

LinqToSql奇怪的行为

我有以下代码: var tagToPosts = (from t2p in dataContext.TagToPosts join t in dataContext.Tags on t2p.TagId equals t.Id select new { t2p.Id, t.Name }); //IQueryable tag2postsToDelete; foreach (Tag tag in tags) { Debug.WriteLine(tag); tagToPosts = tagToPosts.Where(t => t.Name != tag.Name); } IQueryable tagToPostsToDelete = (from t2p in dataContext.TagToPosts join del in tagToPosts on t2p.Id equals del.Id select […]

entity framework中的批量删除

我想使用linq批量删除表中的记录。 有一篇post描述了如何做到这一点: LINQ to Entities中的批量删除 var query = from c in ctx.Customers where c.SalesPerson.Email == “…” select c; query.Delete(); 但是我的var变量中不存在“删除”function。 此外,我的上下文中不存在“SubmitChanges”function。

LINQ to SQL ForeignKeyReferenceAlreadyHasValueException错误

我尝试更改外键时生成此错误。 我知道这是一个非常常见的错误,我发现了很多关于它的信息,并试图实现我发现的修复程序,但在尝试更新密钥时仍然会出现此错误。 参考线程 最初我只是直接分配值而不是尝试映射实体。 ticket.assigned_to_group = assigned_to 我已经改变了尝试映射我相信正确答案的实体; 但是我仍然得到错误。 ticket.assigned_to_group = db.sub_units.Single(f => f.id == assigned_to).id; 知道为什么这不起作用。 此外,如果我有一个包含多个外键的表,我是否真的需要为每个键执行一个新查询,还是有更好的方法?

LINQ to SQL – 如何有效地对多个条件进行AND或OR搜索

我有一个ASP.NET MVC站点(使用Linq To Sql进行ORM)以及客户想要针对定制数据库的搜索工具,他们可以选择进行“AND”搜索(所有条件匹配)或’OR’搜索(任何标准匹配)。 查询非常复杂且冗长,我想知道是否有一种简单的方法可以使它同时完成,而无需创建和维护两个不同版本的查询。 例如,当前的“AND”搜索看起来像这样(但这是一个非常简化的版本): private IQueryable GetSampleSearchQuery(SamplesCriteria criteria) { var results = from r in Table where (r.Id == criteria.SampleId) && (r.Status.SampleStatusId == criteria.SampleStatusId) && (r.Job.JobNumber.StartsWith(criteria.JobNumber)) && (r.Description.Contains(criteria.Description)) select r; } 我可以复制它并用||替换&& 运营商要获得“OR”版本,但感觉必须有更好的方法来实现这一目标。 有没有人有任何建议如何以一种易于维护的高效灵活的方式实现这一目标? 谢谢。