【问题标题】:checking null condition with linq to entites using multiple joins使用 linq 检查空条件到使用多个连接的实体
【发布时间】:2011-09-15 12:21:39
【问题描述】:

我有这样的查询...下面...我想检查空条件...

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

report.member_Lastname.StartsWith(lastname)

如果 cardnum 为空,则不检查此条件

&& report.member_CardNum == cardnum

我正在使用 linq to 实体,我没有使用 linq to 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
                   };   

你们能否为此提出任何想法和任何代码示例 sn-p..

在此先感谢....

修改:

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

我想要类似上面的东西,我知道这个查询使用 linq to sql,但我正在使用 linq to entity

【问题讨论】:

  • && (report.member_CardNum == cardnum || string.IsNullOrEmpty(cardnum))
  • @zespri 不适用于您的情况。
  • “不起作用”什么也没告诉我。请说得更具体一些,我看不懂你的想法。
  • @zespri 我已经尝试过您在上面指定的条件,但它对我不起作用..你清楚..
  • 不。我指的是“不起作用”这一事实并不是对所发生事情的很好描述。它没有提供尽可能多的信息。我多次将这种模式与 EF 一起使用,并且我知道它有效。我知道它不适合你。您需要更具体才能获得进一步的帮助。

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


【解决方案1】:

&& 工作在第一个 false 时停止,所以你可以写

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

与 || 相同首先是真的,所以如果你希望 Lastname 为 null 或 startwith lastname 你可以使用

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

cardnum 和任何你想要的地方都一样。要获取您可以使用的值

report.member_Lastname ?? "yourNullDefault"

假设 member_Lastname 是一个字符串

【讨论】:

  • 有什么方法可以检查输入的名称是否正确)不检查数据库中的表字段值......
  • 这里输入的名称是什么,这取决于 null 是否正确 - 参见上面的两个示例(第一个是不正确的,第二个是正确的)
  • 查看我修改后的代码我想要类似上面的东西不检查数据库表字段值是否为空,我想检查用户是否输入名称..类似的东西..跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-06
  • 1970-01-01
  • 2017-08-06
  • 1970-01-01
  • 2021-02-09
  • 1970-01-01
相关资源
最近更新 更多