代码之家  ›  专栏  ›  技术社区  ›  Martin Marconcini

Linq2sql+plinqo:如何处理这样的简单情况?

  •  1
  • Martin Marconcini  · 技术社区  · 16 年前

    i_m是plinqo的新成员,i_m是linq2sql的新成员,i_m添加了一个新的DAL(称为DAL2),与我们现有的旧DAL并行。我们的想法是开始为我们添加的每一个新东西使用linq2sql,然后慢慢地开始将旧的dal用法转移到新的dal2。

    众所周知,DLINQ很适合简单的事情,但在更复杂的情况下(许多情况下,脱离目标等),问题会立即出现,新的需要绕过它。plinqo(与codesmish一起)来救援,并添加了所有必要的结构和工具,使其更可用。到目前为止,一切都很好。

    现在我已经有了DAL2(我用的是管理器)。IT__Works__。但我有一些疑问。

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

    select name,  Count(*) as Total from SomeTable 
    

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

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

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

    其目的是了解每个标签有多少患者。一个简单的内部连接可以用SQL在标签和病人标签之间修复这个问题。我甚至不需要访问病人表。(我只需要数数)。

    毕竟,我只想举个例子:

    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(以便正确显示和处理),我应该在哪里创建该__helper_157;?

    1)在dal2/helper/tagnametotal.cs中(举个例子)

    2)在blayer/helpers/tagnametotals.cs中?

    3)以上都不是?(或者是?)

    如果上面是 ,我在想什么?

    当有人想将查询结果传递给UI并对其进行修改时,这是否正常?在上面的例子中,我想更改用户界面中的标记名(也许这不是最好的例子,但它适用)。

    不好意思,当linq2sql在网络项目或简单应用程序之外使用时,我仍然觉得它有点粗糙。这些是我们一直在使用ADO.NET(以及之前的记录集)所做的基本工作。

    做一个select/join/group/crazysql,修改,提交修改。

    plinqo很好,因为它可以消除linq2sql在其原始形式(许多2多个,分离,上下文再生,缓存等)中的麻烦,但它仍然是linq,因此必须应用dlinq实践。

    我错过了什么?

    笔记 :不要将PLINQ与PLINQO混淆。

    2 回复  |  直到 16 年前
        1
  •  2
  •   Community Mohan Dere    8 年前

    我已经在 codesmith community 不过,我想到了这个,就看到了这个帖子。你可能会发现 this post some help

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

        2
  •  0
  •   Randy Minder    16 年前

    在我看来,这就像是一个无耻的Plinqo产品插头。我希望这不是你的意图。我看了一下plinqo,可能会得到它,除非你必须购买codesmith才能得到它。不用了,谢谢。

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

    对于那些阅读本文的人,如果你想把钱花在第三方工具上,可以投资于LinqPad和Linqer。你可以用不到75美元的总价来购买这两种工具,它们真是太棒了。我和他们都没有关系。

    兰迪