Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 简化LINQ查询_C#_Asp.net_Linq_Linq To Sql - Fatal编程技术网

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(…)
和no
SingleOrDefault

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