如何在表中不存在的情况下执行此LINQ查询?

时间:2009-06-23 15:11:14

标签: linq linq-to-sql join

在我们的数据库中,如果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表上进行连接的情况吗?有人能指导我一点吗?

2 个答案:

答案 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;
    }
}
相关问题