C# 我的DAL应该返回数据表还是我…不管什么<>;? 编辑1

C# 我的DAL应该返回数据表还是我…不管什么<>;? 编辑1,c#,linq,linq-to-sql,n-tier-architecture,C#,Linq,Linq To Sql,N Tier Architecture,我很抱歉,但是在阅读了这两篇推荐文章之后,我仍然不明白我应该使用什么。我知道出于各种原因,使用IQueryable不是首选,但这是否也消除了IEnumerable?数据表真的是我最好的选择吗 简言之,我想,什么是首选的回报类型 我有以下简单的LINQ查询,我想将其抽象为DAL。var的类型是什么?因此,我的方法应该是什么类型 ConnectDBDataContext context = new ConnectDBDataContext(); var l

我很抱歉,但是在阅读了这两篇推荐文章之后,我仍然不明白我应该使用什么。我知道出于各种原因,使用IQueryable不是首选,但这是否也消除了IEnumerable?数据表真的是我最好的选择吗

简言之,我想,什么是首选的回报类型


我有以下简单的LINQ查询,我想将其抽象为DAL。var的类型是什么?因此,我的方法应该是什么类型

            ConnectDBDataContext context = new ConnectDBDataContext();

        var lName = textEdit1.Text;

        var searchByPersonLName = from c in context.tblPersons
                                  where c.LastName == lName
                                  orderby c.LastName
                                  select new { c.FirstName,c.LastName,c.PersonID};

        dataGridView1.DataSource = searchByPersonLName;
当我在VS中将鼠标悬停在它上面时,它会显示
IQueryable
,但当我输入一个断点并运行它时,它似乎称自己为IEnumerable。哪个是正确的,我应该如何声明我的方法

像这样-->

如果我使用
IQueryable
什么是
,或者我如何知道这一点以及我会返回什么

谢谢

下面是CopyToDataTable()的参考

public static DataTable CopyLinqToDataTable<T>(this IEnumerable<T> source)
    {
        return new ObjectShredder<T>().Shred(source, null, null);
    }

    public static DataTable CopyLinqToDataTable<T>(this IEnumerable<T> source,
                                                DataTable table, LoadOption? options)
    {
        return new ObjectShredder<T>().Shred(source, table, options);
    }
公共静态数据表copylinkToDataTable(此IEnumerable源)
{
返回新的ObjectShreder().Shred(source,null,null);
}
公共静态数据表CopyLinqToDataTable(此IEnumerable源,
数据表,加载选项?选项)
{
返回新的ObjectShreder().Shred(源、表、选项);
}

首先,IQueryable实现了IEnumerable,这就是为什么您可能同时看到这两个。看

一般来说,我建议DAL尽可能返回实际对象

我想听听关于如何做和如何不做你建议的事情的指导方针。简短回答,不要返回IQueryable

编辑: 例如:


首先,IQueryable实现了IEnumerable,这就是为什么您可能同时看到这两个。看

一般来说,我建议DAL尽可能返回实际对象

我想听听关于如何做和如何不做你建议的事情的指导方针。简短回答,不要返回IQueryable

编辑: 例如:


他的意思是将数据映射到希望DAL返回的对象

在回答第一个问题时,“var”实际上只是变量的缩写,类型是赋值中定义的类型

var myvariable = string.empty;
在本例中,类型为字符串类型

var myreader = new StringReader();
而在本例中,类型为StringReader

至于你的第二个问题“是什么”。T是泛型类型

例如,dal将返回实际对象的位置:

 public Product GetProduct(int ProductID)
    {
        var product = from p in db.MyTable
                      where p.productID == ProductID
                      select new product { name = p.name, pricepoint = p.pricepoint, qty = p.quantity };

        return product;
    }

他的意思是将数据映射到希望DAL返回的对象

在回答第一个问题时,“var”实际上只是变量的缩写,类型是赋值中定义的类型

var myvariable = string.empty;
在本例中,类型为字符串类型

var myreader = new StringReader();
而在本例中,类型为StringReader

至于你的第二个问题“是什么”。T是泛型类型

例如,dal将返回实际对象的位置:

 public Product GetProduct(int ProductID)
    {
        var product = from p in db.MyTable
                      where p.productID == ProductID
                      select new product { name = p.name, pricepoint = p.pricepoint, qty = p.quantity };

        return product;
    }

谢谢,你说的“实物”是什么意思?你能给我举个简单的例子吗。通常我使用L2S创建的类,或其中的一个数组。我将以我的DAL如何从我的文件库返回文件对象为例进行编辑。谢谢,你说的“实际对象”是什么意思?你能给我一个简单的例子吗?Se Davids post,它解释了我的意思。通常我使用L2S创建的类,或其中的一个数组。我将以DAL如何从我的文件库返回文件对象为例进行编辑。