//Model
public class Application
{
[Key]
public int ApplicationId { get; set; }
public DateTime CreatedAt { get; set; }
public DateTime ConfirmedDate { get; set; }
public DateTime IssuedDate { get; set; }
public int? AddedByUserId { get; set; }
public virtual User AddedByUser { get; set; }
public int? UpdatedByUserId { get; set; }
public virtual User UpdatedByuser { get; set; }
public string FirstName { get; set; }
public string MiddleName { get; set; }
public string LastName { get; set; }
public string TRN { get; set; }
public string EmailAddress { get; set; }
public string Address { get; set; }
public int ParishId { get; set; }
public Parish Parish { get; set; }
public int? BranchIssuedId { get; set; }
public BranchLocation BranchIssued { get; set; }
public int? BranchReceivedId { get; set; }
public BranchLocation BranchReceived {get; set; }
}
public async Task<List<Application>> GetApplicationsByNameAsync(string name)
{
if (string.IsNullOrEmpty(name))
return null;
return await _context.Application
.AsNoTracking()
.Include(app => app.BranchIssued)
.Include(app => app.BranchReceived)
.Include(app => app.Parish)
.Where(app => app.LastName.ToLower().Contains(name.ToLower()) || app.FirstName.ToLower()
.Contains(name.ToLower()))
.GroupBy(app => new { app.TRN, app })
.Select(x => x.Key.app)
.ToListAsync()
.ConfigureAwait(false);
}
Приведенное выше выражение GroupBy
не компилируется в VS Studio. Моя цель - запустить результаты фильтрации запросов по имени, содержащему заданную пользователем строку, а затем сгруппировать результаты по одинаковым TRN
числам, возвращая список этих приложений для возврата к представлению. Я думаю, что я действительно близок, но просто не могу понять этот последний бит запроса. Любое руководство приветствуется.
Представляется ошибка
InvalidOperationException: The LINQ expression 'DbSet<Application>
.Where(a => a.LastName.ToLower().Contains(__ToLower_0) || a.FirstName.ToLower().Contains(__ToLower_0))
.GroupBy(
source: a => new {
TRN = a.TRN,
app = a
},
keySelector: a => a)' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to either AsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync()
ОБНОВЛЕНИЕ Кажется, что это определенно связано с изменением в. net core 3.x и EF Ядро играть вместе, так как последние обновления. Мне пришлось изменить его на оценку клиента, используя AsEnumerable()
вместо ToListAsync()
. Остальная часть запроса, заданного Стивом Пи, работает с этим методом. Даже после прочтения документации я не знал, как сработала группа в LINQ, и это мне очень помогло. Однако при отправке запроса на клиентскую версию eval могут возникнуть проблемы с производительностью.