У меня есть оператор LINQ, который частично запрос, а частично метод. Как я могу сделать это, используя один или другой? - PullRequest
0 голосов
/ 19 февраля 2020

Вот мой запрос в его нынешнем виде:

Goals = await (from p in _context.FixtureActivityTb 
               where p.ActivityType.Trim() == "G" 
               group p by p.PlayerId into x 
               join j in _context.PlayerTb on x.Key equals j.PlayerId 
               select new Stats 
               { 
                   Name = j.GivenName, 
                   pID = j.PlayerId, 
                   TeamId = j.TeamId, 
                   Count = x.Count() 
               })
   .OrderByDescending(s => s.Count)
   .ThenBy(s => s.Name)
   .Take(10)
   .ToListAsync();

Как видите, это сочетание метода и запроса. Я должен быть в состоянии сделать соединение, где и добавить данные в пользовательский класс все в методе, однако до сих пор я не смог собрать все это вместе. Любые указания будут оценены.

Я включу эти другие пункты, однако, я думаю, что они не имеют отношения к делу.

Объявление переменной:

public IList<Stats> Goals { get; set; }

Класс:

public class Stats
{
    public Guid pID { get; set; }
    public string TeamId { get; set; }
    public string Name { get; set; }
    public int Count { get; set; }
}

Ответы [ 2 ]

2 голосов
/ 19 февраля 2020

Если я понимаю ваш вопрос (и отсутствие кофе на меня не влияет), чтобы передать все это цепочечному методу Линка , это должно быть так же просто, как

Goals = await _context.FixtureActivityTb.Where(p => p.ActivityType.Trim() == "G")
                      .GroupBy(p => p.PlayerId)
                      .Join(_context.PlayerTb, x => x.Key, j => j.PlayerId, (x, j)
                          => new Stats
                             {
                                Name = j.GivenName,
                                pID = j.PlayerId,
                                TeamId = j.TeamId,
                                Count = x.Count()
                             })
                      .OrderByDescending(s => s.Count)
                      .ThenBy(s => s.Name)
                      .Take(10)
                      .ToListAsync();
0 голосов
/ 19 февраля 2020

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

var q = from p in _context.FixtureActivityTb 
        where p.ActivityType.Trim() == "G" 
        group p by p.PlayerId into x 
        join j in _context.PlayerTb on x.Key equals j.PlayerId 
        select new Stats 
        { 
            Name = j.GivenName, 
            pID = j.PlayerId, 
            TeamId = j.TeamId, 
            Count = x.Count() 
        };

Goals = await q.OrderByDescending(s => s.Count)
               .ThenBy(s => s.Name)
               .Take(10)
               .ToListAsync();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...