如若我DAL返回的数据表或我...什么<>?(Should my DAL return

2019-09-29 05:39发布

编辑1

我很抱歉,但阅读2篇推荐文章后,我还是不明白,我应该使用什么。 据我所知,使用的IQueryable不是优选以各种理由但这是否排除了IEnumerable呢? 是一个DataTable真的是我最好的选择?

总之,我想,什么是首选的返回类型?


我有我想抽象出成DAL以下简单的LINQ查询。 什么是变种的类型,因此应我的方法是什么类型的?

            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<T>但是当我把一个断点,并运行它,它似乎调用自身的IEnumerable。 这是正确的,我应该如何申报我的方法?

这样的 - >

        public static DataTable SearchPerson(string SearhParam)
    {
        ConnectDBDataContext context = new ConnectDBDataContext();
        var persons = (from person in context.tblPersons
                       orderby person.LastName
                       select new { person.PersonID, person.LastName, person.FirstName, person.SSN });
        var filteredPersonsList = persons.Where(p => p.LastName == SearhParam).ToList();
        if (filteredPersonsList.Count == 0)
            filteredPersonsList = persons.Where(p => p.LastName.StartsWith(SearhParam)).ToList();

        var dataTable = filteredPersonsList.CopyLinqToDataTable();

        return dataTable;
    }

如果我使用IQueryable<T>是什么<T>或者我怎么知道这一点,我会回来吗?

谢谢!

供参考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);
    }

Answer 1:

他的意思是将数据映射到你想要的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;
    }


Answer 2:

首先,IQueryable的实现IEnumerable,所以这就是为什么你看到的可能都。 请参见此处了解更多详情

一般来说,我会建议你DAL回报您的实际对象只要有可能。

我会阅读此博客的指导方针如何,怎么不去做你的建议是什么。 简短的回答,不返回IQueryable的。

编辑:实施例:

        internal static File[] GetAllFilesByUserID(int userID)
    {
        var db = GetDataContext();
        return (from files in db.Files where files.OwnerUserID == userID select files).ToArray();
    }


文章来源: Should my DAL return DataTables or I…whatever<>?