如何使用linq查找非null或string.empty列?

时间:2012-10-24 16:28:23

标签: linq linq-to-sql

这是我的代码。它的工作原理

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 statemetn会变得很长。

2 个答案:

答案 0 :(得分:3)

我怀疑你实际想要匹配x.SomeField == someField,或者someField为空或空的一切,对吗?

我会这样做:

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

可以内联它,但我认为上述内容比检查查询中someField是空还是空是更清楚。

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

答案 1 :(得分:1)

我做了一些示例,我只是在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();
}