我有以下查询:
db.ObjectTags.Where(c =>
c.TagID == tagID &&
(!db.DeletedObjects.Any(d=> d.ForObjectTypeID == c.ForObjectTypeID && d.ForObjectID == c.ForObjectID)
|| !db.DeletedObjects.SingleOrDefault(d => d.ForObjectTypeID == c.ForObjectTypeID && d.ForObjectID == c.ForObjectID).Deleted)
)
其目标是返回未处于已删除状态的对象。
表DeletedObjects
有两种状态:
deleted (bool)
值我需要查询记录不存在的位置,或者deleted
值是否为false
。
有没有办法压缩该陈述,例如SingleOrDefault()
?
答案 0 :(得分:1)
您只需要一个!db.DeletedObjects.Any(...)
而不需要SingleOrDefault
var q = db.ObjectTags
.Where(c=> c.TagID == tagID && !db.DeletedObjects
.Any(d => d.Deleted && d.ForObjectTypeID == c.ForObjectTypeID && d.ForObjectID == c.ForObjectID));
答案 1 :(得分:0)
你可以试试这个linq查询
db.ObjectTags.Where(c =>
c.TagID == tagID &&
(db.DeletedObjects.Any(d=> d.ForObjectTypeID == c.ForObjectTypeID && d.ForObjectID == c.ForObjectID && !c.Deleted))
)
答案 2 :(得分:0)
我认为您需要在ObjectTags
和DeletedObjects
之间保持联接。像这样的LINQ查询:
from objectTag in db.ObjectTags
from deletedObject in db.DeletedObjects
.Where(deletedObject => deletedObject.ForObjectTypeID == objectTag.ForObjectTypeID && deletedObject.ForObjectID == objectTag.ForObjectID)
.DefaultIfEmpty()
where deletedObject == null || !deletedObject.Deleted