LINQ小实例--显示内部对象的内部数据

来源:互联网 发布:linux下禁止ping 编辑:程序博客网 时间:2024/06/06 09:48

这两天断断续续的完成了个小例子,这里简单记录一下如何显示内部对象的内部数据。

在数据库LINQTest中新建两张表:User和Role,其中,Role表中的RoleID是User表中的外键。

显示效果我希望是这样的:

 

但是,刚开始的时候,显示效果是这样的:

 

为什么会这样呢?因为在代码中,Role实体是作为一个内部对象嵌套在User中的,显示的时候就成了这个样子?那么怎么才能让这个内部对象中的数据显示出来达到我想要的效果呢?

第一种方法:改写Role实体

之前的Role实体类是这个样子的:

public class Role    {        //封装字段名快捷键ctrl +R,ctrl+E        private int roleID;        public int RoleID        {            get { return roleID; }            set { roleID = value; }        }        private string roleName;        public string RoleName        {            get { return roleName; }            set { roleName = value; }        }


 

改写以后就是再重写ToString方法:

//重写ToString方法,返回角色名称,这样才能将role实体内部的数据显示出来        public override string ToString()        {            return roleName;        }


第二种方法:利用新特性——LINQ

在button的事件中修改,重写拖一个button控件,也是显示全部用户,事件代码如下:

  private void btnLINQ_Click(object sender, EventArgs e)        {            IList<User> users = UserManager.GetAllUsers();            //利用新特性--linq            var t_users = users.Select(p => new T_User_Role()            {                UserName = p.UserName,                UserPwd = p.UserPwd,                RoleName = p.UserRole.RoleName            }).Distinct(); //返回数据中的非重复元素            this.dgvuser.DataSource = t_users.ToList <T_User_Role >();        }

在Model下新建一个类

namespace Model{   public class T_User_Role    {       public string UserName       {           get;           set;       }       public string UserPwd       {           get;           set;       }       public string RoleName       {           get;           set;       }    }}

 

显示结果:

 

ok ,目的达到了。

其实一开始修改button的时候是不能显示数据的,但是在程序运行输出窗口中数据时显示的。Linq的执行时机是三步:定义、遍历、查询。在model中加了一个T_User_Role的目的就是为了给显示数据一个类型,否则无法显示。暂时就这么多了。。。


 

 

 

 

 

0 0