1

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

众所周知,LINQ 非常适合简单的事情,但在更复杂的场景(many2many、分离的对象等)中,问题会立即出现,并且需要解决它。PLINQO(与 CodeSmish 一起)来拯救它并添加所有必要的结构和工具以使其更可用。到现在为止还挺好。

现在我已经有了我的 DAL2(我正在使用 Managers)。有用”。但我有几个疑问。

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

select name,  Count(*) as Total from SomeTable 

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

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

Tag (1) <—&gt; (n) PatientTag (n) <—&gt; (1) Patient

这个想法是要知道每个标签有多少病人。一个简单的内部连接将在标签和患者标签之间使用 SQL 解决这个问题。为此,我什至不需要访问 Patient 表。(我只需要计数)。

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

标签 1, 33

标签 2, 21

标签 3, 6

等等……</p>

假设我设法创建了一个 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”)

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

现在真正的问题:

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

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

2) 在 BLayer/Helpers/TagNameTotals.cs 中?

3)以上都不是?(或两者之一?)

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

当有人想将查询结果传递给 UI 并对其进行修改时,这不是很正常吗?假设在上面的示例中,我想更改 UI 中的 TagName(也许这不是最好的示例,但它适用)。

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

进行选择/加入/组/crazySQL,修改,提交更改。

PLINQO 很好,因为它以粗略的形式消除了 LINQ2SQL 的麻烦(多 2 多、分离、上下文重新生成、缓存等),但它仍然是 LINQ,因此必须应用 LINQ 实践。

我错过了什么?

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

4

2 回答 2

2

我已经在codesmith 社区中回答了这篇文章,但是我正在考虑这个问题并遇到了这篇文章。你可能会发现这篇文章有一些帮助

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

于 2009-12-01T07:33:27.890 回答
0

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

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

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

兰迪

于 2009-11-26T14:21:11.787 回答