我应该重新使用我的EF查询方法吗?如果是的话,我该怎么做

时间:2016-12-28 19:08:01

标签: c# winforms entity-framework

我正在使用EF从MySQL数据库中获取数据。

现在,我有两个表,第一个是customers和project_codes。

表project_codes对名为id_customers的客户有一个FK。通过这种方式,我可以查询哪些项目属于客户。

在我的DAL上,我得到了以下内容:

public List<customer> SelectAll()
{
    using (ubmmsEntities db = new ubmmsEntities())
    {
        var result = db.customers
                     .Include(p => p.project_codes)
                     .OrderBy(c=>c.customer_name)
                     .ToList();
        return result;

    }
}

向我输出我的所有客户及其各自的project_codes。

最近我只需要获取项目代码,所以我创建了一个DAL来从我的数据库中获取所有项目代码。但后来我开始思考:&#34;我应该这样做吗?最好不要使用我的SelectAll()方法,并使用Linq从我的所有客户那里获取project_codes列表?

所以这是我的第一个问题。我的意思是,从可维护性的角度来看,尽可能多地重用方法是件好事,对吧?

第二个问题是,如何将所有project_codes放到List中?直接这样做很容易,但我没有以SelectAll()为基础实现这一目标。

如果我使用customer_id,那就好了。

    ddlProject.DataSource = CustomerList.Where(x => x.id.Equals(customer_id))
.Select(p => p.project_codes).FirstOrDefault();

这超出了我对该客户的项目代码,但我尝试了不同的方法(foreach,在哪里和其他一些随机)但是他们要么语法失败,要么不输出包含所有project_codes的列表。所以这是我使用特定方法获取项目代码的另一个原因。

即使&#34;常识&#34;或者最佳实践说重新利用上面提到的方法是一个坏主意,我想要了解如何使用SelectAll()的返回来实现project_codes列表的一些指示...永远不知道什么时候可以来在手。

让我知道你的想法。

1 个答案:

答案 0 :(得分:1)

这里有一个权衡;您要么在内存集合中迭代更大的集合(并进行选择等),要么迭代较小的集合,但必须转到数据库才能执行此操作。

您需要对您的设置进行概要分析,以确定哪个更快,但内存方法完全可能更好(如果您的数据可能已经更改,则可能会过时!)。

要获得所有project_codes,您应该只需要:

List<customer> customers; //Fill from DAL
List<project_code> allProjects = customers.SelectMany(c => c.project_codes).ToList();

请注意,我使用SelectMany来展平集合的层次结构,我认为SelectAll实际上不是LINQ方法。