C# LINQ2SQL+;普林库:一个人如何处理这样一个简单的情况?

C# LINQ2SQL+;普林库:一个人如何处理这样一个简单的情况?,c#,linq-to-sql,data-access-layer,plinqo,C#,Linq To Sql,Data Access Layer,Plinqo,我是PLINQO的新手,对LINQ2SQL相当陌生,我正在添加一个新的DAL(称为DAL2),与我们现有的旧DAL并行。我们的想法是开始为我们添加的每一个新东西使用linq2sql,然后慢慢地将旧的DAL用法转移到新的DAL2 我们都知道,DLINQ对于简单的事情来说很好,但在更复杂的场景中(很多、脱离连接的对象等),问题会立即出现,需要对其进行破解。PLINQO(与CodeSmish一起)出面救援,并添加了所有必要的结构和工具,使其更具可用性。到目前为止,一切顺利 现在我已经有了DAL2(我正

我是PLINQO的新手,对LINQ2SQL相当陌生,我正在添加一个新的DAL(称为DAL2),与我们现有的旧DAL并行。我们的想法是开始为我们添加的每一个新东西使用linq2sql,然后慢慢地将旧的DAL用法转移到新的DAL2

我们都知道,DLINQ对于简单的事情来说很好,但在更复杂的场景中(很多、脱离连接的对象等),问题会立即出现,需要对其进行破解。PLINQO(与CodeSmish一起)出面救援,并添加了所有必要的结构和工具,使其更具可用性。到目前为止,一切顺利

现在我已经有了DAL2(我正在使用管理器)。它“有效”。但我有一些疑问

我理解返回由以下查询组成的对象:

select name,  Count(*) as Total from SomeTable 
…在大多数DB应用程序中不是一个奇怪的场景。这个查询是一个很好的匿名类型的简单示例

现在,想象一下这样的表结构

Tag (1) <—> (n) PatientTag (n) <—> (1) Patient
(我是LINQ的新手,所以如果上述情况不好,请原谅我缺乏“Linqism”)

考虑到我不能返回那个“新”匿名类型(除非我不打算返回Object和reflection),我假设我必须创建一个“helper”类来包含这两个内容(name和total)。其思想是,上述代码应该位于数据层或业务层的某个位置,而不是UI的代码中

现在真正的问题是:

如果上述情况属实,那么如果我想将结果(或结果数组)返回到UI(以便正确显示和处理),我应该在哪里创建“帮助器”

1) 在DAL2/Helper/tagnametottal.cs中(举个例子)

2) 在BLayer/Helpers/tagnameotals.cs中

3) 以上都没有?(或者两者中的任何一个?)

如果以上是正确的,我在想什么

当有人想将查询结果传递到UI并修改它时,这不是很正常吗?在上面的例子中,我想更改UI中的标记名(也许这不是最好的例子,但它适用)

请原谅,我仍然发现在Web项目或简单应用程序之外使用整个LINQ2SQL时有点粗糙。这些是我们使用ADO.NET(以及在此之前的记录集)一直在做的基本事情

制作一个select/join/group/crazySQL,修改并提交更改

PLINQO很好,因为它消除了原始形式的LINQ2SQL的麻烦(多2多、脱连接、上下文再生、缓存等),但它仍然是LINQ,因此必须应用DLINQ实践

我错过了什么


注意:不要将PLinq与PLinqO混淆

这听起来像是PLinqO产品的无耻插头。我希望这不是你的意图。我看了看Plinko,也许会得到它,除非你必须购买CodeSmith才能得到它。不用了,谢谢

我使用L2S构建了一个功能齐全的三层平台,在不使用PLinqO和任何其他第三方工具的情况下,我遇到并处理了与M:M关系、分离实体(尤其是更新)、上下文处理等相关的问题。一旦你了解L2S的工作原理,这是可以做到的。我认为我们的解决方案非常优雅,性能也非常好

对于阅读本文的读者,如果您想在第三方工具上花钱,请投资LinqPad和Linqer。你可以用总共不到75美元的价格买到这两种工具;它们太棒了。我和他们两个都没有关系


Randy

我已经在中回答了这篇文章,但是我在思考这篇文章时遇到了这篇文章。你会发现


基本上,您创建一个迷你类,并使用let语句定义一个子集,然后在需要时延迟加载它….

虽然实用程序(或缺少)PLINQO不是问题,但您还没有真正理解CodeSmith的价值。Codesmith是关于代码生成的。我建议你重读一遍。我非常了解CodeSmith的工作。但是,我不喜欢一开始就要买一件东西才能得到我真正想要的东西。如果我们决定需要完整的代码生成,我们将使用Reegenerator()。它便宜得多。我不能对reegenerator发表评论,但Plinko和CodeSmith非常棒,只是没有太多文档,视频也过时了。显然,可以使用CodeSmith一次(试用版)、PLINQO、生成所有代码,并且永远不会再次重新生成代码,但CodeSmith的优点在于“重新生成”按钮,它将保留所有更改,并从数据库中带来新内容。PLINQO只使用LINQ技术,这并不是什么新奇的东西,但它已经全部完成了。真的,成本不高。我知道我使用代码生成为我当前的项目节省了几天时间。PLINQO,作为一个免费的框架,是一个很大的帮助,让我熟悉LINQtoSQL的来龙去脉。CodeSmith许可证大约占一个月工作发票的5%。我在我的上一个项目中使用了NHibernate,我很可能会再次使用它,但真糟糕。Codesmith和Plinko给我留下了深刻的印象。@Sympatric Gred-您是否也知道Plinko对M2M支持的实现是完全有缺陷的(由他们自己承认)?几个月前,我在他们的M2M支持中遇到了一个bug,并向他们发送了一封支持电子邮件。他们承认他们的M2M支持“完全有缺陷”,不知道什么时候可以修复。没问题,很高兴能为PLinqo用户提供服务。我们周围似乎不多!
   var result1 = from pt in dc.PatientTag
                 join t in dc.Tag on pt.TagId equals t.TagId
                 select new { TagName = t.TagName };


   var result2 = from q in result1
                 group q by q.TagName into gp
                 select new { TagName = gp.Key, Total = gp.Count() };