使用linq检查null条件到使用多个连接的实体

时间:2011-09-15 12:21:39

标签: c# .net linq entity-framework linq-to-entities

我有这样的查询......下面......我想检查空状态......

如果姓氏(输入的名字)是空的,请不要检查这个条件...

report.member_Lastname.StartsWith(lastname)

如果cardnum是空的,请不要检查这种情况

&& report.member_CardNum == cardnum

我正在使用linq实体,而我没有使用linq来实现sql

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.StartsWith(lastname)
                      && report.member_CardNum == cardnum 
                      && report.member_Postcode.StartsWith(postcode)
                      && report.member_Reference.StartsWith(refernce)
                      && report.member_Gender.StartsWith(gender)
                      && membershiptypes.mshipType_Name.StartsWith(membershiptype)
                      && membershipstatustypes.mshipStatusType_Name.StartsWith(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
                   };   

你们是否会为此提出任何想法和任何代码示例代码段。

非常感谢...

修改:

if(!string.IsNullOrEmpty(lastname))
    query = query.Where(r => r.member_Lastname == lastname);

我想要上面的东西,我知道这个查询使用linq到sql但我使用linq到实体

1 个答案:

答案 0 :(得分:0)

&安培;&安培;工作在第一次失败时停止,因此你可以写

...                          
where  
   (report.member_Lastname != null && report.member_Lastname.StartsWith(lastname))
&& ...

与||相同首先是true,所以如果你想让Lastname为null或者以lastname开头,你可以使用

...                          
where  
   (report.member_Lastname == null || report.member_Lastname.StartsWith(lastname))
&& ...

与cardnum相同,无论你想要什么。要获得可以使用的值

report.member_Lastname ?? "yourNullDefault"

假设member_Lastname是一个字符串