【问题标题】:select null entries using linq使用 linq 选择空条目
【发布时间】:2013-09-25 17:12:42
【问题描述】:

我有这个使用下拉选择列表过滤的 linq 查询。 过滤器有效,但是,我想从表中选择城市为空的所有字段。这个标准给出了空的结果集。 这是错误的,因为有超过 100 个条目没有城市。

我的模型有这个:

public class classA
{
   public string city {get; set;}   
   public ClassB somethingfromClassB{get; set;}    
}

public class classB
{
    //get set methods here
}

A 类的控制器如下所示:

public class classA : controller
{
   public actionresult index()
   {
      //everything here works except this linq gives me an empty result sets:

      var a = db.classA.inlcude(t=>t.somethingfromClassB);
      if(value =="")
      {
          a=db.classA.where(u=>u.city==null).inlcude(t=>t.somethingfromClassB);
      }
      return view(a.tolist())
   }
}

【问题讨论】:

  • 数据库中city的类型是什么?是 nvarchar 吗?
  • 您确定database 中的city 字段是nullempty?我怀疑您可能会无意中将城市字段保存为empty
  • 好的,我如何在我的 linq 查询中检查两者
  • 只检查null 或空字符串。 .Where(u => u.city == null || u.city == String.Empty).
  • @Menew "...因为有超过 100 个条目没有城市。" 请您发布用于获取这 100 行的 SQL Select 语句吗?跨度>

标签: c# asp.net-mvc linq


【解决方案1】:

我相信您想要执行左外连接?

请看: Converting a LEFT OUTER JOIN to Entity Framework

和/或

如何:执行左外连接(C# 编程指南) http://msdn.microsoft.com/en-us/library/vstudio/bb397895.aspx

【讨论】:

    【解决方案2】:

    如果您将Empty 字符串视为NULL,首先您应该改变主意!其次,您可以像这样检查这两种情况:

    a= db.classA
         .where(u=>String.IsNullOrEmpty(u.city))
         .inlcude(t=>t.somethingfromClassB);
    

    【讨论】:

    • @HamletHakobyan 这个 Linq 查询是每个开发人员甚至初学者都知道如何编写的东西。我们中的许多人都知道如何检查字符串是否为空和空。这在某种程度上是最好的和唯一的方法。但是您看到我发布的 cmets 和 OP 给我的答案了吗?这是解决问题的方法。我遵循简单的规则来找出问题所在。我们不是来炫耀自己的
    • Linq 只是查询语言而不是技术。你知道 OP 使用什么技术吗?
    • 对不起!这与您之前的评论有何关系?
    • Linq 用于许多技术: Linq2Objects Linq2sql ... 在每种技术中Linq 以不同的方式翻译。另外,还有IQueryable接口,Linq在其上以另一种方式实现。
    • 我什至不知道有一个 IQueriable 提供者将 String.IsNullOrEmpty 翻译成与预期不同的东西。此外,OP 的问题在于 Linq2Entities/Linq2Sql 不是很明显吗?
    【解决方案3】:

    以下更改是否有效:

    a=db.classA.where(u=>u.city == null || u.city == "").inlcude(t=>t.somethingfromClassB);
    

    【讨论】:

    • @HamletHakobyan 我想念他正在使用 EntityFramework。编辑我的答案,使用 String.IsNullOrEmpty 测试 null 和空字符串。这不是问题,但它仍然会在这种情况下发现最明显的错误。
    猜你喜欢
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-17
    • 2012-09-06
    • 2011-04-13
    相关资源
    最近更新 更多