如何在LINQ查询中转换此SQL语句?
ISNULL(IsBlocked,0) = 0
IsBlocked
是表Persons
中的一列。
我想我有两个解决方案。一个用于INT或SMALLINT数据类型,另一个用于数据库中的BIT数据类型。
如果你的IsBlocked列在SQL Server中是BIT TYPE,那么你可以使用下面给出的代码。
//This Class Represent as your Table Schema
public class PersonTableOne
{
public int PersonID { get; set; }
public string Name { get; set; }
public bool? IsBlocked { get; set; }
}
void TestMethod1()
{
List<PersonTableOne> personItems = new List<PersonTableOne>();
personItems.Add(new PersonTableOne() { PersonID = 1, Name= "A" ,IsBlocked=null});
personItems.Add(new PersonTableOne() { PersonID = 2, Name = "B", IsBlocked = true });
personItems.Add(new PersonTableOne() { PersonID = 2, Name = "C", IsBlocked = false });
var answare = from m in personItems
where (m.IsBlocked ?? false) == false
select m;
}
注意:Class是表的表示形式,而List是表的行。
如果你的IsBlocked Column是INT/SMALLINT TYPE在SQL Server中,那么你可以下面给出的代码。
public class PersonTableTwo
{
public int PersonID { get; set; }
public string Name { get; set; }
public int? IsBlocked { get; set; }
}
void TestMethod2()
{
List<PersonTableTwo> personItems = new List<PersonTableTwo>();
personItems.Add(new PersonTableTwo() { PersonID = 1, Name = "A", IsBlocked = null });
personItems.Add(new PersonTableTwo() { PersonID = 2, Name = "B", IsBlocked = 1 });
personItems.Add(new PersonTableTwo() { PersonID = 2, Name = "C", IsBlocked = 0 });
var answare = from m in personItems
where (m.IsBlocked ?? 0) == 0
select m;
}
你可以这样做
var result = from a.IsBlocked in db.Persons where a.IsBlocked == null
select new { IsBlocked = false};
您可以将字段转换为字符串并检查是否为空。
String.IsNullOrEmpty(IsBlocked.ToString()) //this is going to be true if IsBlocked = null