2016-06-18 2 views
-3

Как написать запрос LINQ для возврата Bool значение?Скомпилированный запрос 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()); 
    } 

Таким образом, если оба критерия выполнены, то возвращает истину.

Любой другой код, который я пробовал, просто загромождает сообщение.

Исследовательские ссылки,

Плюс у меня есть книга Pro C# 5.0 and the .NET 4.5 Framework (Expert's Voice in .NET) которой я ссылающийся из.

+0

Что вы на самом деле спрашиваете здесь? Первый запрос LINQ «лучше»/более идиоматичен, – ChrisF

+0

@ChrisF, чтобы скомпилированный запрос возвращал значение bool? – KyloRen

+1

Это поможет включить любые ошибки/исключения, которые вы получаете, или если эти запросы в настоящее время работают, то какие результаты вы получаете и какие результаты вы действительно хотите? –

ответ

6

Проблема заключается в определении функции:

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)); 
} 

Это должно вернуть вам ответ, который вы желаете.

+0

Так что мне пришлось пройти через все это, чтобы сказать, что в конце я отсутствовал «bool». Спасибо кучу за ответ, вот и все. Проголосуйте за усилия, и я постараюсь, чтобы ответ был решен. – KyloRen

Смежные вопросы