目录

  • efcore某张表中获取某几个字段
    • 2.1 使用select方法
    • 2.2 使用foreach方法
  • 3.法二:iqueryble

efcore某张表中获取某几个字段

1.背景

在前后端分离的应用场景中,某张统计表有20几个字段,但是前端可能只用到4个字段,这样就涉及到获取某个表中的部分字段值。本文介绍3种方法。

2.法一:linq

2.1 使用select方法

list<emplayee> emplayeelist = getemplayeelist();            //获取员工信息列表
int[] empids = emplayeelist.select(a => a.id).toarray();    //获取员工编号数组

2.2 使用foreach方法

list<emplayee> emplayeelist = getemplayeelist();  //获取员工信息列表
string empids = "";
emplayeelist.foreach(a => empids += a.id + ",");
empids = empids.trimend(',');
console.writeline(empids);   //输出:1,2,3

2.3 其他参考代码

/// <summary>  
/// 员工信息类  
/// </summary>  
public class emplayee
{
    /// <summary>
    /// 编号
    /// </summary>
    public int id { get; set; }
 
    /// <summary>  
    /// 姓名  
    /// </summary>  
    public string name { get; set; }
/// <summary>  
/// 获取员工信息列表  
/// </summary>  
/// <returns></returns>  
public static list<emplayee> getemplayeelist()
{
    list<emplayee> emplayeelist = new list<emplayee>();
    emplayee emplayee1 = new emplayee() { id = 1, name = "张三" };
    emplayee emplayee2 = new emplayee() { id = 2, name = "李四" };
    emplayee emplayee3 = new emplayee() { id = 3, name = "王五" };
    emplayeelist.add(emplayee1);
    emplayeelist.add(emplayee2);
    emplayeelist.add(emplayee3);
    return emplayeelist;
}

3.法二:iqueryble

3.1 参考例子一

我有个新闻表

id,title,body,createtime,author,click

使用ef4.1 仅仅读取 id,title,createtime 并显示在页面上。

 public static list<newinfo> gethotnews()
        {
            list<newinfo> list;
            list = (from n in db.newinfoes
                    where n.istop == 1
                    orderby n.publishtime descending
                    select new
                    {
                        title = n.title,
                        newid = n.newid,
                        publishtime = n.publishtime
                    }).tolist();
            return list;
        }
改为
public static list<newinfo> gethotnews()
        {
            list<newinfo> list;
            list = (from n in db.newinfoes
                    where n.istop == 1
                    orderby n.publishtime descending
                   
       .select(n => new newinfo
                    {
                        title = n.title,
                        newid = n.newid,
                        publishtime = n.publishtime
                    });
            return list;
        }

备注:只是ienumerable是把所有数据拉到内存里筛选,iqueryable会形成sql直接在库里查询返回

3.2 参考例子二

4.法三:建立一个对象,然后配置一个automapper,然后将查询结果匹配过来

具体可以自行尝试

参考:
1.网友 kawhi(1585955375), 奥特曼迪斯特洛夫斯基(479663032)
2.https://blog.csdn.net/lcnmdfx/article/details/8332401
3.https://blog.csdn.net/pan_junbiao/article/details/51757904