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

C# 使用lambda表达式连接并检索数据,c#,.net,winforms,linq,lambda,C#,.net,Winforms,Linq,Lambda,我有一个带有列的members表 member_Id, member_Lastname, member_Firstname, member_Postcode, member_Reference, member_CardNum, mshipoption_id mshiptype_id 我还有另一个带有列的表mshipoptions member_Id, member_Lastname, member_Firstname, member_Postcode,

我有一个带有列的
members

  member_Id,
  member_Lastname,
  member_Firstname,
  member_Postcode,
  member_Reference,
  member_CardNum,
mshipoption_id
mshiptype_id
我还有另一个带有列的表
mshipoptions

  member_Id,
  member_Lastname,
  member_Firstname,
  member_Postcode,
  member_Reference,
  member_CardNum,
mshipoption_id
mshiptype_id
我还有另一个表
mshiptypes

 mshiptype_id
 mshiptype_name
另一个表
memtomship

 memtomship_id
 mshipoption_id
 member_id
我的实体名称是
eclipse

在表单加载时,我使用下面的方法填充datagrid视图

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(); 
           }
}
那很好

我的问题是,我有一个comboboxsay(cbgemembershiptype)

当用户在(cbgemembershiptype)中选择成员资格类型时,我希望检索成员的详细信息,即拥有该成员资格类型的成员的详细信息……

(您的问题不清楚您得到的查询是否已经满足您的要求。我假设它满足您的要求。)

不清楚为什么要将此查询转换为使用lambda表达式的查询。这当然是可能的,但是每个连接都会引入一个新的范围变量-到最后,严格的直译将以一个select结束,该select涉及如下内容

member_Id = a.b.c.member_Id
。。。它根本就不可读

如果你用手写的话,有很多方法可以改进它,但是它仍然没有查询表达式那么清晰

您应该明确地知道这两种形式,并使用对所讨论的查询最清晰的形式进行编写—在本例中,这绝对是查询表达式形式


有关如何翻译查询表达式的更多信息,请参见my。

请查看我修改的代码,我不确定检查会员名和卡号是否正确,我不知道如何检查KC mship类型名称。。请您提供任何示例代码或想法……@errorstacks:对不起,您的问题很不清楚。请集中精力尽可能清晰地重写它-阅读我已修改了我的查询,您是否知道如何使用在组合框中选择了成员类型的成员ship type检索成员详细信息……我知道其中包括join,但我不知道如何做…@errorstacks:抱歉,我仍然花了太多的时间来阅读这个问题——部分原因是你没有为大写字母、格式化代码以便我们可以在不滚动的情况下看到所有内容而烦恼。这听起来很琐碎,但确实让回答变得更困难。请看