注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Lucifer 的博客

网易英超评论专栏

 
 
 

日志

 
 
 
 

如何将LINQ组合查询的结果绑定datagrid(2)  

2007-12-21 15:03:21|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

下面是建立一个WinForm Application,在里面加入一个DataGridView控件。

Program.cs

 

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

 

namespace SRX071121602000

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

            ReadData();

        }

 

        public void ReadData()

        {

            var query = from p in LoadPerson()

                        from r in LoadRole()

                        where p.RoleID == r.RoleID

                        select new

                        {

                            PersonID = p.PersonID,

                            PersonName = p.PersonName,

                            RoleName = r.RoleName

                        };

 

            dataGridView1.DataSource = query.ToList();

            dataGridView1.Show();

           

        }

 

        public IEnumerable<Person> LoadPerson()

        {

            List<Person> persons = new List<Person>();

            Person p;

 

            for (int i = 0; i <10 ispan>

            {

                p = new Person();

                p.PersonID = "PersonID" + i.ToString();

                p.RoleID = "RoleID" + i.ToString();

                p.PersonName = "PersonName" + i.ToString();

                persons.Add(p);

            }

 

            return persons;

        }

 

        public IEnumerable<Role> LoadRole()

        {

            List<Role> role = new List<Role>();

            Role r;

 

            for (int i = 0; i <7 ispan>

            {

                r = new Role();

                r.RoleName = "RoleName" + i.ToString();

                r.RoleID = "RoleID" + i.ToString();

                role.Add(r);

            }

 

            return role;

        }

      

    }

}

 

代码通过LoadRole()LoadPerson()来生成两个Entity构成的IEnumerable  List对象作为测试数据。LINQ TO OBJECT可以接受IEnumerable对象来作为查询的数据源。

 

然后写以下LINQ来实现两个Object查询:

 

var query = from p in LoadPerson()

                        from r in LoadRole()

                        where p.RoleID == r.RoleID

                        select new

                        {

                            PersonID = p.PersonID,

                            PersonName = p.PersonName,

                            RoleName = r.RoleName

                        };

 

最后查询取得query也是一个IEnumerable对象,以上select出来的就是C#2.0加入的anonymous types特性。C#会自动创建一个匿名的class,里面有PersonIDPersonNameRoleName三个成员。是泛型,比起以往的object来减少了装箱和拆箱的效率消耗,可以用任意类型代替T,在我们这个查询中,T就被我们的匿名类代替了。

 

  评论这张
 
阅读(781)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017