使用lambda表达式连接并检索数据

时间:2011-09-13 18:03:04

标签: c# .net winforms linq lambda

我有一个members表,其中包含

  member_Id,
  member_Lastname,
  member_Firstname,
  member_Postcode,
  member_Reference,
  member_CardNum,

我有另一张表mshipoptions,其中包含

mshipoption_id
mshiptype_id

我有另一张表mshiptypes

 mshiptype_id
 mshiptype_name

另一张表memtomship

 memtomship_id
 mshipoption_id
 member_id

我的实体名称为eclipse

在表单加载时,我使用以下方法填充数据网格视图....

private void reportmembers()
{
        MemberControlHelper.Fillmembershiptypes(cbGEMembershiptype); 
        var membersreport = from tsgentity in eclipse.members
                                join memtomships in eclipse.membertomships on tsgentity.member_Id equals memtomships.member_Id
                                join mshipoptiions in eclipse.mshipoptions on memtomships.mshipOption_Id equals mshipoptiions.mshipOption_Id
                                join mshiptypes in eclipse.mshiptypes on mshipoptiions.mshipType_Id equals mshiptypes.mshipType_Id
                                select 
                                new {                                     
                                    tsgentity.member_Id,
                                    tsgentity.member_Lastname,
                                    tsgentity.member_Firstname,
                                    tsgentity.member_Postcode,
                                    tsgentity.member_Reference,
                                    tsgentity.member_CardNum,
                                   mshiptypes.mshipType_Name,                                   
                                };

           if (txtfirstname.Text != "")
           {
              dgvmembersrep.DataSource = membersreport.Where(t => t.member_Firstname == txtlastname.Text).ToList();                
           }
           if (txtcardnum.Text != "")
           { 
                dgvmembersrep.DataSource = membersreport.Where(a => a.member_CardNum == txtcardnum.Text).ToList(); 
           }
}

很好,......

我的问题在这里,我有一个组合框(cbgemembershiptype)......

当用户选择(cbgemembershiptype)中的成员资格类型时,我想要检索具有该成员资格类型的成员的详细信息....

1 个答案:

答案 0 :(得分:3)

(你的问题不清楚你的查询是否已经做了你想要的。我假设它。)

目前还不清楚为什么你希望使用lambda表达式将此查询转换为一个。这当然是可能的,但是每个连接都会引入一个新的范围变量 - 到最后,严格的字面翻译最终会产生一个涉及类似

的选择
member_Id = a.b.c.member_Id

......根本不可读。

如果您手动编写它,有很多方法可以改进它,但它仍然不如查询表达式那么清晰。

你绝对应该知道这两种形式,并使用对于有问题的查询最清楚的形式进行编写 - 在这种情况下绝对是查询表达形式。<​​/ p>

有关如何翻译查询表达式的详细信息,请参阅我的Edulinq post on that topic