如何使用 LINQ 查找非 NULL 或 String.empty 列?



这是我的代码。

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

这就是问题所在,some字段也可以是null或string.empty。如果 someField 为 null 或 string.empty,我将选择 SomeField 为 null 或 string.empty 的所有内容。

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

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

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

我怀疑你真的想匹配x.SomeField == someField,或者如果someField为空或空的所有内容,对吧?

我会这样做:

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

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

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

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

我希望这对你有用。

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();
}

最新更新