在我们的数据库中,如果FileTable上的“Pending”列设置为false并且Transaction表中不存在文件FileID,则文件为“Processing”。
如何构建一个基本上是
的LINQ查询其中f.Pending == False&& (f.ID!=存在于db.Transactions.FileID中)
括号中的部分是我不知道该怎么做的。我可以在单独的查询中执行此操作,但我知道有一种方法可以在一个查询中优雅地执行此操作。
这是我到目前为止所做的:
public IEnumerable<PlacementFile> getProcessingPlacementFiles()
{
using (LinqModelDataContext db = new LinqModelDataContext())
{
var placementFiles = from f in db.Placement_Files
where (f.Pending == false && (f.ID does not exist in db.Transactions.FileID))
orderby f.Import_Date descending
select f;
return placementFiles;
}
这是我需要在FileTable和Transactions表上进行连接的情况吗?有人能指导我一点吗?
答案 0 :(得分:1)
使用:
where !f.Pending && !db.Transactions.Any(trans => trans.ID == f.ID)
至少应该逻辑上 - 你必须看看它是否生成了正确的SQL,当然:)
答案 1 :(得分:0)
在这种情况下,您希望使用Any()扩展方法,如下所示:
public IEnumerable<PlacementFile> getProcessingPlacementFiles()
{
using (LinqModelDataContext db = new LinqModelDataContext())
{
return from f in db.Placement_Files
where (!f.Pending && !db.Transactions
.Any( t => t.FileID == f.ID)
orderby f.Import_Date descending
select f;
}
}