Как получить наименьшее количество в ядре entityframe? - PullRequest
1 голос
/ 01 февраля 2020

Вот две таблицы, одна с именем State, другая с именем WorkingOn.

workers_name    state
aaa             onduty
bbb             offduty
ccc             onduty
ddd             offduty
workers_name    working_on
aaa             projectA
aaa             projectB
aaa             projectC
bbb             projectB
bbb             projectC
ccc             projectA
ccc             projectB
ccc             projectC
ccc             projectD
ddd             projectC

Теперь я хочу получить дежурного работника, работающего над наименьшим количеством проектов.

Я пытался добиться этого с помощью SQL кода:

select state.name,count(workingon.working) from state join workingon on state.name=workingon.name group by state.name

Однако я хочу добиться этого с помощью Entity Framework Core.

Не могли бы вы мне помочь? Спасибо.

===================================== Вот код сервера:

 public class TestDBContext : DbContext
    {
        public virtual DbSet<statemodel> state { get; set; }
        public virtual DbSet<workingonmodel> workingon { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlite("Data Source=123.db");
        }
        public TestDBContext(DbContextOptions options) : base(options)
        {

        }

    protected TestDBContext()
    {
    }
    protected override void OnModelCreating(ModelBuilder builder)
    {
        builder.Entity<statemodel>().HasNoKey();
        builder.Entity<workingonmodel>().HasNoKey();
        base.OnModelCreating(builder);
    }
}
public class statemodel
    {
        public string name { get; set; }
        public string state { get; set; }

    }
public class workingonmodel
    {
        public string name { get; set; }
        public string working { get; set; }

    }

1 Ответ

1 голос
/ 01 февраля 2020

Теперь я хочу, чтобы дежурный работник работал над наименьшим количеством проектов.

Вы можете получить дежурных работников, упорядочить их по количеству проекты и возьмите первый.

т.е. учитывая

DbContext db = ...;
var state = db.Set<statemodel>();
var workingon = db.Set<workingonmodel>();

запрос будет выглядеть примерно так:

var workerInQuestion = state
    .Where(s => s.state == "onduty")
    .OrderBy(s => workingon.Count(w => w.name == s.name))
    .Select(s => s.name)
    .FirstOrDefault();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...