使用 LINQ 作为 DAL 时如何传输数据?

Posted

技术标签:

【中文标题】使用 LINQ 作为 DAL 时如何传输数据?【英文标题】:How to transfer data when using LINQ as DAL? 【发布时间】:2010-12-15 14:25:17 【问题描述】:

我正在创建我的第一个基于 linq 的项目。 DAL 由 LinqToSQL 类组成。而逻辑层只是另一个保持简单的DLL。

我想知道如何将 var 对象(选择查询的结果)从登录层传递到表示层?

我应该在登录层和表示层之间编写自己的 DTO 层以将 BLL 传输到表示层还是应该将数据序列化为 XML?

谢谢,维卡斯

【问题讨论】:

【参考方案1】:

只要您有机会将数据作为强类型类传递,我就会避免序列化。这就是你必须要做的。我相信当 .Net 4.0 出现时,您将能够传递 var,但在此之前,当您需要将查询传递给另一个函数时,请尝试将查询返回为 IEnumerable 而不是 var。

IE:

public class myClass

    public int RecordID  get; set; 
    public string Field1  get; set; 


public void GetDataAndSendToOtherLayer()

    using (DBDataContext db = new DBDataContext)
    
        IEnumerable<myClass> Recs =
            from tab in db.table
            select new myClass
            
                RecordID = tab.RecordID,
                Field1 = tab.Field1
            ;

        OtherLayer.DoSomething(Recs);
    

【讨论】:

【参考方案2】:

将每行结果加载到一个对象中,将每个对象放入一个集合中,然后将集合从 DAL 传递到您的 BOL,然后在集合传递到您的演示文稿之前,您的业务规则可以处理它。

【讨论】:

以上是关于使用 LINQ 作为 DAL 时如何传输数据?的主要内容,如果未能解决你的问题,请参考以下文章

DAL数据访问层

使用具有不同层的 LINQ 意味着我无法访问特定类型

DAL/BLL 和客户端/服务器:客户端应该使用 BLL 还是 DAL 对象进行演示?或者可能是另一层(数据传输对象?)

如何在 UI、BLL、DAL 之间使用 DTO

如何在业务逻辑层设计数据传输对象

如果您可以使用任何 .NET DAL 技术,您会选择啥?