C# 多表筛选不起作用的linq查询联接

C# 多表筛选不起作用的linq查询联接,c#,.net,winforms,linq,linq-to-entities,C#,.net,Winforms,Linq,Linq To Entities,我有一个有四个文本框和两个组合框的表单 我正在筛选数据并在datagrid视图中显示数据,具体取决于combobox中的选择和文本框中键入的文本 为此,我编写了以下代码 private void btnRunreports_Click(object sender, EventArgs e) { int agefrom = Convert.ToInt32(cbGEFrom.Text); int ageto = Convert.ToInt32(cbGETo.Text); Da

我有一个有四个文本框和两个组合框的表单

我正在筛选数据并在datagrid视图中显示数据,具体取决于combobox中的选择和文本框中键入的文本

为此,我编写了以下代码

private void btnRunreports_Click(object sender, EventArgs e)
{
    int agefrom = Convert.ToInt32(cbGEFrom.Text);
    int ageto = Convert.ToInt32(cbGETo.Text);
    DateTime today = DateTime.Today;
    DateTime max = today.AddYears(-(agefrom + 1));
    DateTime min = today.AddYears(-(ageto));

    string maximum = Convert.ToString(max);
    string minimum = Convert.ToString(min);

    string gender = "";
    gender = Classes.reportmembers.ConvertGender(cbGEGendertype.Text);
    var mems = Classes.reportmembers
                      .getallreportmembers(gender,
                                           cbGEMembershiptype.SelectedText,
                                           txtlastname.Text,
                                           txtpostcode.Text,
                                           txtcardnum.Text,
                                           txtreference.Text,
                                           cbGEStatustype.SelectedText,
                                           maximum, minimum);
    BindingSource bs = new BindingSource();
    bs.DataSource = mems;
    dgvReportMembers.DataSource = bs;
}
这是我的班级
reportmembers

class ReportMebers
{
    public int MemberID { get; set; }
    public string Lastname { get; set; }
    public string Firstname { get; set; }
    public string Postcode { get; set; }
    public string Reference { get; set; }
    public string CardNum { get; set; }
    public string IsBiometric { get; set; }
    public string DOB { get; set; }
    public string MShipType { get; set; }
    public string StatusType { get; set; }
    public string EndDate { get; set; }
}

 class reportmembers
 {
     public static List<ReportMebers> getallreportmembers(string gender, string membershiptype, string lastname,
                                                    string postcode,string cardnum,string refernce,
                                                      string membershipstatustypesa, string maxage, string minage)
     {

         //CultureInfo provider = CultureInfo.InvariantCulture;
         EclipseEntities eclipse = new EclipseEntities();
        List<ReportMebers> reporall = new List<ReportMebers>();
         var memberreport = from report in eclipse.members
                            join memtomship in eclipse.membertomships on report.member_Id equals memtomship.member_Id
                            join mshoption in eclipse.mshipoptions on memtomship.mshipOption_Id equals mshoption.mshipOption_Id
                            join membershiptypes in eclipse.mshiptypes on mshoption.mshipType_Id equals membershiptypes.mshipType_Id
                            join membershipstatustypes in eclipse.mshipstatustypes on memtomship.mshipStatusType_Id equals membershipstatustypes.mshipStatusType_Id                              
                            where  report.member_Lastname.Equals(lastname)
                            && report.member_CardNum.Equals(cardnum)
                            && report.member_Postcode.Equals(postcode)
                            && report.member_Reference.Equals(refernce)
                            && report.member_Gender.Equals(gender)
                            && membershiptypes.mshipType_Name.Equals(membershiptype)
                            && membershipstatustypes.mshipStatusType_Name.Equals(membershipstatustypesa)
                            && string.Compare(report.member_Dob,maxage) >= 0
                            && string.Compare(report.member_Dob, minage)< 0
                            select new
                            {
                                report.member_Id,
                                report.member_Lastname,
                                report.member_Firstname,
                                report.member_Postcode,
                                report.member_Reference,
                                report.member_CardNum,
                                report.member_IsBiometric,
                                report.member_Dob,
                                membershiptypes.mshipType_Name,
                                membershipstatustypes.mshipStatusType_Name,
                                memtomship.memberToMship_EndDate
                            };
         try
         {
             foreach (var membe in memberreport)
             {

                 ReportMebers allmembersrepor = new ReportMebers();
                 allmembersrepor.MemberID = membe.member_Id;
                 allmembersrepor.Lastname = membe.member_Lastname;
                 allmembersrepor.Firstname = membe.member_Firstname;
                 allmembersrepor.Postcode = membe.member_Postcode;
                 allmembersrepor.Reference = membe.member_Reference;
                 allmembersrepor.CardNum = membe.member_CardNum;
                 allmembersrepor.IsBiometric = membe.member_IsBiometric;
                 allmembersrepor.DOB = membe.member_Dob;
                 allmembersrepor.MShipType = membe.mshipType_Name;
                 allmembersrepor.StatusType = membe.mshipStatusType_Name;
                 allmembersrepor.EndDate = membe.memberToMship_EndDate;
                 reporall.Add(allmembersrepor);

             }
         }
         catch (Exception ex)
         {

             MessageBox.Show(ex.Message);

         }
         return reporall;
     }
类报告对象
{
public int MemberID{get;set;}
公共字符串Lastname{get;set;}
公共字符串名{get;set;}
公共字符串邮政编码{get;set;}
公共字符串引用{get;set;}
公共字符串CardNum{get;set;}
公共字符串IsBiometric{get;set;}
公共字符串DOB{get;set;}
公共字符串MShipType{get;set;}
public string StatusType{get;set;}
公共字符串EndDate{get;set;}
}
班级报告员
{
公共静态列表getallreportmembers(字符串性别、字符串成员类型、字符串姓氏、,
字符串邮政编码、字符串cardnum、字符串引用、,
字符串成员身份状态类型A、字符串最大值、字符串最小值)
{
//CultureInfo provider=CultureInfo.InvariantCulture;
日食食=新的日食();
List reporall=新列表();
var memberreport=来自eclipse.members中的报告
在eclipse中加入memtomship.membertomships on report.member_Id等于memtomship.member_Id
在memtomship.mshipOption\u Id等于mshoption.mshipOption\u Id的eclipse.mshipOption中加入mshoption
在eclipse中加入membershiptypes。mshoption上的mshiptypes.mshipType_Id等于membershiptypes.mshipType_Id
加入eclipse中的membershipstatustypes。memtomship上的mshipstatustypes。mshipStatusType_Id等于membershipstatustypes.mshipStatusType_Id
其中report.member_Lastname.Equals(Lastname)
&&report.member_CardNum.Equals(CardNum)
&&报告。成员的邮政编码等于(邮政编码)
&&报告.成员\引用.等于(引用)
&&报告。成员性别平等(性别)
&&membershiptypes.mshipType_Name.Equals(membershiptype)
&&membershipstatustypes.mshipStatusType_Name.Equals(membershipstatustypesa)
&&string.Compare(report.member_Dob,maxage)>=0
&&string.Compare(report.member_Dob,minage)<0
选择新的
{
report.member_Id,
report.member_Lastname,
report.member_Firstname,
report.member_邮政编码,
报告。成员参考,
report.member_CardNum,
report.member_是生物特征,
报告。成员_Dob,
membershiptypes.mshipType\u名称,
membershipstatustypes.mshipStatusType\u名称,
memtomship.memberToMship\u EndDate
};
尝试
{
foreach(memberreport中的变量membe)
{
ReportMebers AllMembersReport=新的ReportMebers();
AllMembersReport.MemberID=membe.member\u Id;
AllMembersReport.Lastname=membe.member\u Lastname;
AllMembersReport.Firstname=membe.member\u Firstname;
AllMembersReport.Postcode=membe.member\u邮编;
AllMembersReport.Reference=membe.member\u Reference;
allmembersrepor.CardNum=membe.member\u CardNum;
AllMembersReport.IsBiometric=membe.member\u IsBiometric;
allmembersrepor.DOB=membe.member\u DOB;
AllMembersReport.MShipType=membe.MShipType\u名称;
AllMembersReport.StatusType=membe.mshipStatusType\u名称;
AllMembersReport.EndDate=membe.memberToMship\u EndDate;
reporall.Add(所有成员报告);
}
}
捕获(例外情况除外)
{
MessageBox.Show(例如Message);
}
回补;
}
如果我在txtlastname中键入robin,则将显示姓氏为robin的详细信息

我已经登录了数据库有一个姓罗宾的人。。 但它不会显示在datagrid视图中

有人能帮忙吗


非常感谢….

您的问题是,您正在对所有字段进行AND比较。这意味着,只返回数据库中与所有输入数据匹配的条目!如果您只输入robin作为姓氏,而不输入其他内容,您将不会得到任何结果,因为所有其他字段都不匹配。请将查询更改为包含o仅限不为空的字段。如下所示:

var query = from report in eclipse.members
            join memtomship in eclipse.membertomships on report.member_Id equals memtomship.member_Id
            join mshoption in eclipse.mshipoptions on memtomship.mshipOption_Id equals mshoption.mshipOption_Id
            join membershiptypes in eclipse.mshiptypes on mshoption.mshipType_Id equals membershiptypes.mshipType_Id
            join membershipstatustypes in eclipse.mshipstatustypes on memtomship.mshipStatusType_Id equals membershipstatustypes.mshipStatusType_Id;

if(!string.IsNullOrEmpty(lastname))
    query = query.Where(r => r.member_Lastname == lastname);
if(!string.IsNullOrEmptry(cardnum)
    query = query.Where(r => r.member_CardNum == cardnum);
// and so on for all parameters

请你更清楚地问一下好吗?我不明白……我想V4Vendetta是问你比较中的上/下套管。我的意思是“罗宾”==“罗宾”,但不是“罗宾”——“罗宾”我的会员类型还有一个问题,我在cbGEMembershiptype中有会员类型。SelectedText是Gold,在数据库中也是Gold,但它没有显示拥有Gold会员类型的会员。是否有其他选项可以获取详细信息…我的意思是,如果我输入会员姓氏,将显示会员详细信息,如果我选择在组合框中选择成员类型成员详细信息将显示那些已选择成员类型的成员。如果(!string.IsNullOrEmpty(lastname))memberreport=memberre,请您提出其他建议…如果(!string.IsNullOrEmpty(lastname))memberreport=memberre