【问题标题】:Compiled LINQ Query returning Bool Value?编译的 LINQ 查询返回 Bool 值?
【发布时间】:2016-06-18 12:37:01
【问题描述】:

如何编写 LINQ 查询以返回 Bool 值?

到目前为止我的代码,

public class AddNewRow
    {
        public static Func<DatabaseDataContext, DateTime, int, Staff_Time_TBL>
            GetNewRowMissingData =
                     CompiledQuery.Compile((DatabaseDataContext db, DateTime dDate, int staffNo) =>
                     db.Staff_Time_TBLs.Any(a => a.Date_Data == dDate && a.Staff_No == staffNo));
    }

也试过了,

public class AddNewRow
    {
        public static Func<DatabaseDataContext, DateTime, int, Staff_Time_TBL>
            GetNewRowMissingData =
                     CompiledQuery.Compile((DatabaseDataContext db, DateTime dDate, int staffNo) =>
                     db.Staff_Time_TBLs.Where(a => a.Date_Data == dDate && a.Staff_No == staffNo).Any());
    }

因此,如果两个条件都满足,则返回 true。

我尝试过的任何其他代码都会使帖子变得混乱。

研究链接,

另外,我有本书 Pro C# 5.0 and the .NET 4.5 Framework (Expert's Voice in .NET) 参考。

【问题讨论】:

  • 你到底在问什么?第一个 LINQ 查询“更好”/更惯用,
  • @ChrisF,让编译后的查询返回一个布尔值?

标签: c# linq


【解决方案1】:

问题出在你的函数定义中:

public static Func<DatabaseDataContext, DateTime, int, Staff_Time_TBL>

根据MSDN page on compiled queries,这会将DateTime 和int 作为输入参数并返回Staff_Time_TBL 作为结果。

最后一个类型是返回类型,所以你需要在末尾有一个bool:

public static Func<DatabaseDataContext, DateTime, int, bool>

然后在您的查询中,我将使用带有谓词的Any,因为给出最终结果更符合习惯:

public class AddNewRow
{
    public static Func<DatabaseDataContext, DateTime, int, bool>
        GetNewRowMissingData =
                 CompiledQuery.Compile((DatabaseDataContext db, DateTime dDate, int staffNo) =>
                 db.Staff_Time_TBLs.Any(a => a.Date_Data == dDate && a.Staff_No == staffNo));
}

这应该会返回您想要的答案。

【讨论】:

  • 所以我必须经历所有这些才能说我最后错过了bool。非常感谢您的回答,仅此而已。为努力投票,我会标记答案已解决。
猜你喜欢
  • 2015-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-28
  • 1970-01-01
  • 2022-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多