Код: Выделить всё
var singleEnvData = GetData().SingleOrDefault(d => d.EnvId == id);
Код: Выделить всё
IQueryable GetData()
{
return EnvironmentTags
.Where(et => !et.IsDeleted &&
et.PerforceServers.Any(ps => !ps.IsDeleted &&
!ps.PerforceServer.IsDeleted &&
ps.PerforceServer.Status != ServerStatus.Decommissioned) &&
et.PerforceServers.Count(ps => ps.PerforceServer.ServerType == ServerType.Commit) >= 1)
.Select(et => new
{
et.Id,
et.Name,
Users = et.PerforceServers.SelectMany(ps =>
ps.PerforceServer.Users.Where(u => u.IsDeleted == false && u.DeletedOnPerforceServer == false))
})
.Select(et => new Foo
(
et.Id,
et.Name,
et.Users.Count(),
et.Users.Count(u => u.IsSuperUser != null && u.IsSuperUser.Value),
et.Users.Count(u =>
u.TicketExpiresOn != null && u.TicketExpiresOn.Value > DateTime.UtcNow.AddYears(1)),
et.Users.Count(u =>
u.LastAccessedOn == null || u.LastAccessedOn < DateTime.UtcNow.AddMonths(-3)),
et.Users.Count(u => u.IsDisabledInAd != null && u.IsDisabledInAd.Value),
et.Users.Count(u => u.PerforceGroups.Any())
));
}
Код: Выделить всё
IQueryable GetData()
{
return EnvironmentTags
.Where(et => !et.IsDeleted &&
et.PerforceServers.Any(ps => !ps.IsDeleted &&
!ps.PerforceServer.IsDeleted &&
ps.PerforceServer.Status != ServerStatus.Decommissioned) &&
et.PerforceServers.Count(ps => ps.PerforceServer.ServerType == ServerType.Commit) >= 1)
.Select(et => new
{
et.Id,
et.Name,
Users = et.PerforceServers.SelectMany(ps =>
ps.PerforceServer.Users.Where(u => u.IsDeleted == false && u.DeletedOnPerforceServer == false))
})
.Select(et => new Foo
{
EnvId = et.Id,
EnvName = et.Name,
Total = et.Users.Count(),
Supers = et.Users.Count(u => u.IsSuperUser != null && u.IsSuperUser.Value),
UnlimitedTickets = et.Users.Count(u =>
u.TicketExpiresOn != null && u.TicketExpiresOn.Value > DateTime.UtcNow.AddYears(1)),
Inactive = et.Users.Count(u =>
u.LastAccessedOn == null || u.LastAccessedOn < DateTime.UtcNow.AddMonths(-3)),
DisabledInAd = et.Users.Count(u => u.IsDisabledInAd != null && u.IsDisabledInAd.Value),
NoGroupMembership = et.Users.Count(u => u.PerforceGroups.Any())
});
}
Код: Выделить всё
class Foo
{
public int EnvId { get; set; }
public string EnvName { get; set; }
public int Total { get; set; }
public int Supers { get; set; }
public int UnlimitedTickets { get; set; }
public int Inactive { get; set; }
public int DisabledInAd { get; set; }
public int NoGroupMembership { get; set; }
public Foo(
int envId,
string envName,
int total,
int supers,
int unlimitedTickets,
int inactive,
int disabledInAd,
int noGroupMembership)
{
EnvId = envId;
EnvName = envName;
Total = total;
Supers = supers;
UnlimitedTickets = unlimitedTickets;
Inactive = inactive;
DisabledInAd = disabledInAd;
NoGroupMembership = noGroupMembership;
}
public Foo()
{
}
}
InvalidOperationException: выражение LINQ «DbSet()
//опущено для краткости
).EnvId == __id_0)» не удалось перевести. Либо перепишите запрос в форме, которая >может быть переведена, либо явно переключитесь на оценку клиента, вставив вызов >'AsEnumerable', 'AsAsyncEnumerable', 'ToList' или 'ToListAsync'.
Подробнее здесь: https://stackoverflow.com/questions/786 ... perty-init