【问题标题】:Priority in retrieving Data from mysql database and filtering the retrieved data从mysql数据库中检索数据并过滤检索到的数据的优先级
【发布时间】:2020-07-13 13:22:22
【问题描述】:

我只想检索数据库的一列。以下代码确实有效:

这是我在 mysql-table/model-in-EF6 中的客户

 public partial class customers
    {
        public customers()
        public int CustomerID { get; set; }
        public string FullName { get; set; }
        public string Mobile { get; set; }
        public string Email { get; set; }
        public string Address { get; set; }
        public string Image { get; set; }
    }
public List<customers> GetAllCustomers()
        {
            return myContext.customers.ToList();
        }

这是我的问题:

var GetOneColumn = myContext.CustomerRepository.GetAllCustomers().Select(f=>f.FullName);

它是否从数据库中的客户检索所有列,然后从检索到的数据中仅选择一列(全名),它仅从数据库中检索一列(全名)?如果它从数据库中检索所有数据,那么正确的代码是什么(Linq)?

我怎么能找到那个?

【问题讨论】:

    标签: c# entity-framework-6


    【解决方案1】:

    由于您使用的是.ToList() EF,因此

    1. 从数据库中检索所有客户
    2. 将它们映射到客户对象
    3. 稍后,当您计算 GetOneColumn 时,您会对它们进行投影(遍历已经物化的对象列表)

    要只检索一列,

    1. 从存储库中删除.ToList(),并返回IQueryable&lt;Customers&gt;
    2. 致电.ToList() 您选择var GetOneColumn = myContext.CustomerRepository.GetAllCustomers().Select(f=&gt;f.FullName).ToList();

    所以,你的代码是

    public IQueryable<customers> GetAllCustomers()
    {
          return myContext.customers;
    }
    // later in code
    var GetOneColumn = myContext.CustomerRepository.GetAllCustomers().Select(f=>f.FullName).ToList();
    

    看看自己发生了什么!将代码分解为多个步骤并调试

    var allCustomers = myContext.CustomerRepository.GetAllCustomers();
    var allCustomerNames = allCustomers.Select(f=>f.FullName);
    

    或者,在您的数据库上运行分析器,或在 EF 中启用查询记录

    要查看 EF 生成的所有查询,您可以执行以下操作

    using (var context = new BlogContext())
    {
        context.Database.Log = Console.Write;
    
        // Your code here...
    }
    

    docsLog Queries executed by Entity Framework DbContext查看更多详情

    如果您读到这里,那么有必要知道什么会导致 EF 发送查询 - 请参阅 How Queries Work

    基本上,每当您开始枚举 IQueryable&lt;T&gt; 的元素时都会发生这种情况(包括 LINQ 方法,如 First()Last()Single()ToList()ToArray() 等)

    【讨论】:

    • 简单而完整的答案。非常感谢。
    • 不客气@ehsan_kabiri_33!很高兴我能帮上忙!
    猜你喜欢
    • 1970-01-01
    • 2017-08-02
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    • 2013-04-02
    • 2015-12-03
    相关资源
    最近更新 更多