Использование частного метода в лямбда-выражении - PullRequest
0 голосов
/ 05 апреля 2020

Я работаю над дескриптором logi c и получил эту проблему. Если я использую этот код, он не работает:

private bool CheckDateTimeIsValid(DateTime startTime, DateTime endTime, DateTime dateTime)
{
    if (DateTime.Compare(startTime, dateTime) <= 0 && DateTime.Compare(endTime, dateTime) >= 0)
    {
        return true;
    }

    return false;
}

var listChallengeUsers = _context.ChallengeUseres
            .Where(cu => cu.AppUserId == activity.AppUserId)
            .Where(cu => cu.Challenge.ActivityType == activity.Type)
            .Where(cu => CheckDateTimeIsValid(cu.Challenge.StartTime, cu.Challenge.EndTime, activity.CreatedAt))

Но если я использую этот код, он работает:

var listChallengeUsers = _context.ChallengeUseres
            .Where(cu => cu.AppUserId == activity.AppUserId)
            .Where(cu => cu.Challenge.ActivityType == activity.Type)
            .Where(cu => DateTime.Compare(cu.Challenge.StartTime, activity.CreatedAt) <= 0 && DateTime.Compare(cu.Challenge.EndTime, activity.CreatedAt) >= 0 )
            .ToList();

Может кто-нибудь помочь мне узнать, почему это происходит и как использовать первым способом?

1 Ответ

0 голосов
/ 05 апреля 2020

Ваш метод не помечен как "stati c", поэтому либо вызовите его с помощью экземпляра, либо пометьте метод как stati c, например:

private static bool CheckDateTimeIsValid ( DateTime startTime, DateTime endTime, DateTime dateTime )
{
    if (DateTime.Compare ( startTime, dateTime ) <= 0 && DateTime.Compare ( endTime, dateTime ) >= 0)
    {
        return true;
    }

    return false;
}

Кроме того, ваш код может короче, как это:

static bool CheckDateTimeIsValid ( DateTime startTime, DateTime endTime, DateTime dateTime ) => startTime <= dateTime && dateTime <= endTime;

И если вы решите, что метод будет stati c, то имеет смысл использовать этот метод как расширение, если вы будете часто использовать этот метод в разных местах. :

public static class DateTimeExts
{
    public static bool CheckDateTimeIsValid ( this DateTime dateTime, DateTime startTime, DateTime endTime ) => startTime <= dateTime && dateTime <= endTime;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...