Начиная с ASP.NET Core 2.2 [ApiController]
можно использовать в сборке
[assembly: ApiController]
namespace WebApi
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
}
}
Обратите внимание, что для работы этой версии необходимо установить версию совместимости 2.2 или более позднюю.
Другой подход - просто использовать базовый контроллер и аннотировать его атрибутом [ApiController]
[ApiController]
public abstract class MyBaseController
{
}
Подобный подходу Минимума Y,
Отредактированный:
var duplicates = agents.GroupBy(a => a.ID).Where(a=>a.Count() > 1);
foreach (var agent in duplicates)
{
Console.WriteLine(agent.Key.ToString());
}
Если это имеет значение я просто сравнил эти два метода, на которые мы ударили в этом потоке. Сначала я определил класс помощника:
public class Foo
{
public int ID;
}
... и затем вошел в большой список экземпляров со случайным идентификатором:
var list = new List<Foo>();
var r = new Random();
for (int i = 0; i < 10000; i++) list.Add(new Foo { ID = r.Next() });
... и наконец, синхронизировал код:
var sw = new Stopwatch();
sw.Start();
bool b = list.Any(i => list.Where(j => i != j).Any(j => j.ID == i.ID));
Console.WriteLine(b);
Console.WriteLine(sw.ElapsedTicks);
sw.Reset();
sw.Start();
b = (list.GroupBy(i => i.ID).Count() != list.Count);
Console.WriteLine(b);
Console.WriteLine(sw.ElapsedTicks);
Вот вывод того:
Ложь
59392129
Ложь
168151
Таким образом, я думаю смело можно сказать, что группировка и затем сравнение количества групп к количеству объектов являются путем, путь быстрее, чем выполнение "в лоб" "вложило Какое-либо" сравнение.
Мое взятие (никакой подсчет!):
var duplicates = agents
.GroupBy(a => a.ID)
.Where(g => g.Skip(1).Any());
foreach(var agent in Agents) {
if(Agents.Count(a => a.ID == agent.ID) > 1)
Console.WriteLine("Found: {0}", agent.ID);
}
bool b = list.Any(i => list.Any(j => j.ID == i.ID && j != i));
Это - определенный метод решения "в лоб", но он работает. Мог бы быть более умный способ сделать это с помощью Кроме () дополнительный метод.
Править: Вы на самом деле не сказали, что необходимо было знать, какие объекты "дублированы", только что необходимо было знать ли любой где. Это сделает, то же самое кроме дает Вам список, которого можно выполнить итерации:
список. Где (я => список. Любой (j => j. Идентификатор == я. Идентификатор && j! = i))
Мне нравится группирующийся подход также (группа идентификатором, и найдите группы с количеством> 1).