मेरे पास अभिव्यक्ति के साथ एक फ़िल्टर विधि है, जैसे:

public IQueryable<Alert> GetAlerts(Expression<Func<Alert, bool>> filter, bool includeDone = false)
{
    var query = _patientDbContext.Alerts
                .Where(filter);

    if (!includeDone)
    {
        query = query.Where(i => !i.IsDone);
    }

    query = query.OrderBy(i => i.Deadline);

    return query;
}

लेकिन अब मैं इस फ़िल्टर विधि को वास्तविक फ़ंक्शन में कॉल करना चाहता हूं

public async Task<List<Alert>> GetAllAlertsForOrganisation(int organisationId, DateTime? beginDate, DateTime? endDate)
{
    var query2 = GetAlerts(i => i.OrganisationId == organisationId && (beginDate == null || i.CreatedAt <= endDate) &&
                (endDate == null || i.CreatedAt >= beginDate)).ToList();

    return await ....//What to call the GetAlerts method?
                .ToListAsync();
}
2
CodeIsNice 29 मार्च 2020, 11:14

1 उत्तर

सबसे बढ़िया उत्तर

यह अतुल्यकालिक है:

var query2 = GetAlerts(i => i.OrganisationId == organisationId && (beginDate == null || i.CreatedAt <= endDate) && (endDate == null || i.CreatedAt >= beginDate));

return await query2.ToListAsync();

जैसा कि @weichch ने उल्लेख किया है, GetAlerts कुछ भी निष्पादित नहीं करता है डेटाबेस में:

एंटिटी फ्रेमवर्क कोर LINQ विधियों के समान एसिंक एक्सटेंशन विधियों का एक सेट प्रदान करता है, जो एक क्वेरी निष्पादित करता है और परिणाम देता है। उदाहरणों में ToListAsync (), ToArrayAsync (), SingleAsync () शामिल हैं। कुछ LINQ ऑपरेटरों जैसे कि कहां (...) या ऑर्डरबी (...) के कोई एसिंक संस्करण नहीं हैं क्योंकि ये विधियां केवल LINQ अभिव्यक्ति वृक्ष बनाती हैं और क्वेरी को डेटाबेस में निष्पादित नहीं करती हैं।

1
JeremyTCD 29 मार्च 2020, 08:28