编译后的LINQ查询返回Bool值?

时间:2016-06-18 12:37:02

标签: c# linq

如何编写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)

1 个答案:

答案 0 :(得分:6)

问题在于你的函数定义:

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

根据MSDN page on compiled queries,这会将DateTimeint作为输入参数,并返回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));
}

这应该会给你你想要的答案。