我是 PLINQO 的新手,我对 LINQ2SQL 还很陌生,我正在添加一个新的 DAL(称为 DAL2)与我们现有的旧 DAL 并行。我们的想法是开始对我们添加的每一个新事物使用 linq2sql,然后慢慢开始将旧的 DAL 使用转移到新的 DAL2。
众所周知,LINQ 非常适合简单的事情,但在更复杂的场景(many2many、分离的对象等)中,问题会立即出现,并且需要解决它。PLINQO(与 CodeSmish 一起)来拯救它并添加所有必要的结构和工具以使其更可用。到现在为止还挺好。
现在我已经有了我的 DAL2(我正在使用 Managers)。有用”。但我有几个疑问。
我了解返回由以下查询组成的对象:
select name, Count(*) as Total from SomeTable
…在大多数数据库应用程序中并不是一个奇怪的场景。该查询是一个很好的匿名类型的简单示例。
现在,想象一下这样的表结构。
Tag (1) <—> (n) PatientTag (n) <—> (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 混淆。