LINQ2SQL + PLINQO:如何处理这样的简单情况?

时间:2009-11-26 13:47:57

标签: c# linq-to-sql data-access-layer plinqo

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

众所周知,DLINQ适用于简单的事情,但在更复杂的情况下(许多人,脱离的对象等),问题立即出现,并且需要对其进行破解。 PLINQO(与CodeSmish一起)拯救并添加了所有必要的结构和工具,使其更加实用。到现在为止还挺好。

现在我已经拥有了DAL2(我正在使用Managers)。有用”。但我有些疑惑。

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

select name,  Count(*) as Total from SomeTable 

...在大多数数据库应用程序中并不是一个奇怪的场景。查询是一个很好的匿名类型的简单示例。

现在暂时想象一下像这样的表结构。

Tag (1) <—> (n) PatientTag (n) <—> (1) Patient

这个想法是知道每个标签有多少患者。一个简单的内部联接将使用SQL在标记和患者标记之间进行修复。我甚至不需要访问Patient表。 (我只需要点数)。

毕竟,我想要的只是例如:

TAG1,33

TAG2,21

TAG3,6

等...

假设我设法创建一个执行它的linq2sql查询:

   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() };

(我是LINQ的新手,所以如果上述情况不好,原谅我缺少“LINQissm”)

鉴于我不能返回那个“新的”匿名类型(除非我去寻找不是我的意图的对象和反射),我假设我必须创建一个“帮助器”类来包含这两个东西(名称和总数) 。我们的想法是,上面的代码应位于数据层或业务层中的某个位置,并且UI代码中的不是

现在真正的问题是:

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

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

2)在BLayer / Helpers / TagNameTotals.cs?

3)以上都没有? (或者?)

如果以上为真,我的错误思考是什么?

当有人想将查询结果传递给用户界面并进行修改时,这是不正常的?在上面的示例中,我想在UI中更改TagName(可能这不是最好的示例,但它适用)。

对不起,但我发现整个LINQ2SQL在webproject或简单应用程序之外使用时有点粗糙。这些是我们在ADO.NET(以及之前的记录集)中一直在做的基本事情。

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

PLINQO很好,因为它以粗糙的形式消除了LINQ2SQL的麻烦(许多2,deatached,上下文重新生成,缓存等),但它仍然是LINQ,所以DLINQ实践必须适用。

我错过了什么?

注意:不要将PLinq与PLinqO混淆。

2 个答案:

答案 0 :(得分:2)

我在codesmith community回复了这篇文章,不过我正在考虑这个问题,并且发现了这篇文章。您可以找到this post some help

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

答案 1 :(得分:0)

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

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

对于那些阅读本文的人来说,如果你想在第三方工具上花钱,可以投资LinqPad和Linqer。您可以以低于75美元的价格购买这两种工具;他们很棒。而且我与他们中的任何一个都无关。

兰迪