【问题标题】:how to find non null or string.empty columns using linq?如何使用 linq 查找非 null 或 string.empty 列?
【发布时间】:2014-06-06 18:50:10
【问题描述】:

这是我的代码。它有效

var someField = "abc";

var list = Entities.Where(x=>SomeField).FirstOrDefault();

问题来了,someField 也可以为 null 或 string.empty。如果 someField 为 null 或 string.empty,我将选择 SomeField 为 null 或 string.empty 的所有内容。

var list = Entities.Where(x=>SomeField  == null || SomeField == string.empty).FirstOrDefault();

现在,我有一个 if else 语句来检查 someField 是否有值,然后决定使用哪个查询。

我需要将 2 个查询合并为一个。因为如果有我们需要检查的字段,那么这个 if else 语句会变得很长。

【问题讨论】:

  • 在第一个 sn-p 中,您暗示 SomeField 的类型为 bool。现在它的类型是string?你的问题很不清楚。

标签: linq linq-to-sql


【解决方案1】:

我怀疑你实际上想要匹配 x.SomeField == someField,或者如果 someField 为 null 或为空,则匹配所有内容,对吗?

我会这样做:

var fetchAll = string.IsNullOrEmpty(someField);
var list = Entities.FirstOrDefault(x => fetchAll || x.SomeField == someField);

可以内联它,但我认为上面的内容比在查询中检查someField 是否为空或为空更清楚。

请注意,我使用了 FirstOrDefault 的重载,它带有一个谓词 - 这相当于使用 Where 后跟 FirstOrDefault,但更简洁一些。

【讨论】:

  • 嗯,很有趣。我怀疑这是对 OP 意图的更正确解释。
【解决方案2】:

我做了一个小样本,我只是在 SomeField 中获取具有 null 或空值的实体...

我希望这对你有用。

public class MyEntity
{
    public int ID { get; set; }

    public string SomeField { get; set; }
}

static void Main(string[] args)
{
   List<MyEntity> Entities = new List<MyEntity>();
   for (int i = 0; i < 10; i++)
   {
       Entities.Add(new MyEntity()
                   {
                       ID = i,
                       SomeField = "Value " + i.ToString()
                   });
   }

   Entities.Add(new MyEntity() { ID = 10, SomeField = null });
   var entity = Entities.Where(x => string.IsNullOrEmpty(x.SomeField)).FirstOrDefault();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 2011-05-01
    • 2014-07-24
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    相关资源
    最近更新 更多