我有一个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)中的成员资格类型时,我想要检索具有该成员资格类型的成员的详细信息....
答案 0 :(得分:3)
(你的问题不清楚你的查询是否已经做了你想要的。我假设它。)
目前还不清楚为什么你希望使用lambda表达式将此查询转换为一个。这当然是可能的,但是每个连接都会引入一个新的范围变量 - 到最后,严格的字面翻译最终会产生一个涉及类似
的选择member_Id = a.b.c.member_Id
......根本不可读。
如果您手动编写它,有很多方法可以改进它,但它仍然不如查询表达式那么清晰。
你绝对应该知道这两种形式,并使用对于有问题的查询最清楚的形式进行编写 - 在这种情况下绝对是查询表达形式。</ p>
有关如何翻译查询表达式的详细信息,请参阅我的Edulinq post on that topic。