那么使用Any()函数呢?
var t = (from ir in Context.InspectionReview
join so in Context.SiteObjects on ir.ObjectId equals so.Id
where so.SiteRegionId == 6 && so.SiteId == 5
select new
{
inspReviewID = ir.Id,
isFixed = ir.IsNormal,
objId = so.Id
}).Any();
看完你的评论后,我想我可能会误解你的问题。然而,如果你想看看结果作为任何真正的“IsNormal”,你总是可以做到这一点:
var t = (from ir in Context.InspectionReview
join so in Context.SiteObjects on ir.ObjectId equals so.Id
where so.SiteRegionId == 6 && so.SiteId == 5
select new
{
inspReviewID = ir.Id,
isFixed = ir.IsNormal,
objId = so.Id
}).Any(a => a.isFixed);
第三编辑
后您编辑你的问题,然后我修改我的答案与小测试片段来证明我的观点。
public class Derp
{
public int SiteRegionId { get; set; }
public int SiteId { get; set; }
public bool? IsNormal { get; set; }
}
我然后使用DERP类来匹配您的例子:
List<Derp> nullDerps = new List<Derp>();
nullDerps.Add(new Derp
{
IsNormal = null,
SiteId = 5,
SiteRegionId = 6
});
List<Derp> trueDerps = new List<Derp>();
trueDerps.Add(new Derp
{
IsNormal = true,
SiteId = 5,
SiteRegionId = 6
});
List<Derp> falseDerps = new List<Derp>();
falseDerps.Add(new Derp
{
IsNormal = false,
SiteId = 5,
SiteRegionId = 6
});
bool? firstNull = (from d in nullDerps
where d.SiteRegionId == 6 && d.SiteId == 5
select d.IsNormal).FirstOrDefault();
bool? firstTrue = (from d in trueDerps
where d.SiteRegionId == 6 && d.SiteId == 5
select d.IsNormal).FirstOrDefault();
bool? firstFalse = (from d in falseDerps
where d.SiteRegionId == 6 && d.SiteId == 5
select d.IsNormal).FirstOrDefault();
bool anyNull = (from d in nullDerps
where d.SiteRegionId == 6 && d.SiteId == 5
select d.IsNormal).Any(a => a.HasValue && a.Value);
bool anyTrue = (from d in trueDerps
where d.SiteRegionId == 6 && d.SiteId == 5
select d.IsNormal).Any(a => a.HasValue && a.Value);
bool anyFalse = (from d in falseDerps
where d.SiteRegionId == 6 && d.SiteId == 5
select d.IsNormal).Any(a => a.HasValue && a.Value);
你的方法,使用FirstOrDefault()函数真的doesn't帮助您捕捉如果布尔值为null。因此,您可以使用Any()函数,您可以随时询问您要查找的内容。上面的例子中得到这些结果:
- firstNull == NULL
- firstTrue == TRUE
- firstFalse ==假
- anyNull ==假
- anyTrue == TRUE
- anyFalse = = false
如果您只在IsFixed为true时才会变为true,则任何函数应该是要走的路。再次,如果我误解你的问题,那么请修改。
你的代码甚至编译?我的意思是'SingleOrDefault'在这里不给'bool?'。 –
你的变量是bool(空),但在你的查询中选择一个对象!你需要这个对象还是一个布尔值(布尔值,我猜)? –
查看以下网页上的左外连接:https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b – jdweng