【问题标题】:How can I do this LINQ query on a condition that something not exist in a table?如何在表中不存在某些内容的情况下执行此 LINQ 查询?
【发布时间】:2009-06-23 15:11:13
【问题描述】:

在我们的数据库中,如果 FileTable 上的“Pending”列设置为 false 并且文件 FileID 不存在于 Transaction 表中,则文件为“Processing”。

我怎样才能构造一个基本上是这样的 LINQ 查询,

其中 f.Pending == False && (f.ID !=exist in 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 表进行连接的情况吗?有人可以指导我一点吗?

【问题讨论】:

    标签: linq linq-to-sql join


    【解决方案1】:

    用途:

    where !f.Pending && !db.Transactions.Any(trans => trans.ID == f.ID)
    

    这至少应该在逻辑上工作 - 当然,你必须看看它是否生成了正确的 SQL :)

    【讨论】:

      【解决方案2】:

      这是你想使用 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;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多