C# 简化LINQ查询
我有以下疑问:C# 简化LINQ查询,c#,asp.net,linq,linq-to-sql,C#,Asp.net,Linq,Linq To Sql,我有以下疑问: db.ObjectTags.Where(c => c.TagID == tagID && (!db.DeletedObjects.Any(d=> d.ForObjectTypeID == c.ForObjectTypeID && d.ForObjectID == c.ForObjectID) || !db.DeletedObjects.SingleOrDefault(d => d.ForObjectTy
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
有两种状态:
- 记录不存在(未删除)
- 存在的记录具有
值已删除(bool)
deleted
值为false
是否有任何方法可以压缩该语句,例如使用
SingleOrDefault()
?您能试试这个linq查询吗
db.ObjectTags.Where(c =>
c.TagID == tagID &&
(db.DeletedObjects.Any(d=> d.ForObjectTypeID == c.ForObjectTypeID && d.ForObjectID == c.ForObjectID && !c.Deleted))
)
您只需要一个
!db.DeletedObjects.Any(…)
和noSingleOrDefault
var q = db.ObjectTags
.Where(c=> c.TagID == tagID && !db.DeletedObjects
.Any(d => d.Deleted && d.ForObjectTypeID == c.ForObjectTypeID && d.ForObjectID == c.ForObjectID));
我认为您需要在
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