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

如何使用linq查找非null或string.empty列?,linq,linq-to-sql,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 == nul

这是我的密码。它起作用了

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是否有值,然后决定使用哪个查询

我需要将这两个查询合并为一个查询。因为如果有需要检查的字段,那么if-else状态会变得很长。

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

我会这样做:

var fetchAll = string.IsNullOrEmpty(someField);
var list = Entities.FirstOrDefault(x => fetchAll || x.SomeField == someField);
您可以内联它,但我认为上面的内容比在查询中检查
someField
是否为null或空更清楚

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

我怀疑您实际上想要匹配
x.SomeField==SomeField
,或者如果
SomeField
为null或空,对吧?

我会这样做:

var fetchAll = string.IsNullOrEmpty(someField);
var list = Entities.FirstOrDefault(x => fetchAll || x.SomeField == someField);
您可以内联它,但我认为上面的内容比在查询中检查
someField
是否为null或空更清楚


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

我做了一个小示例,我只是在某个字段中得到了一个值为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();
}
公共类MyEntity
{
公共int ID{get;set;}
公共字符串SomeField{get;set;}
}
静态void Main(字符串[]参数)
{
列表实体=新列表();
对于(int i=0;i<10;i++)
{
Entities.Add(新的MyEntity()
{
ID=i,
SomeField=“Value”+i.ToString()
});
}
Add(new MyEntity(){ID=10,SomeField=null});
var entity=Entities.Where(x=>string.IsNullOrEmpty(x.SomeField)).FirstOrDefault();
}

我做了一个小示例,我只是在某个字段中得到了一个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();
}
公共类MyEntity
{
公共int ID{get;set;}
公共字符串SomeField{get;set;}
}
静态void Main(字符串[]参数)
{
列表实体=新列表();
对于(int i=0;i<10;i++)
{
Entities.Add(新的MyEntity()
{
ID=i,
SomeField=“Value”+i.ToString()
});
}
Add(new MyEntity(){ID=10,SomeField=null});
var entity=Entities.Where(x=>string.IsNullOrEmpty(x.SomeField)).FirstOrDefault();
}

在第一个代码片段中,您暗示
SomeField
属于
bool
类型。现在它的类型是
string
?你的问题很不清楚。在第一个片段中,你暗示
SomeField
属于
bool
类型。现在它的类型是
string
?你的问题很不清楚。嗯,很有趣。我怀疑这是对OP意图的更正确的解释。嗯,很有趣。我怀疑这是对OP意图更正确的解释。