Recientemente actualicé uno de mis proyectos para usar .NET 6 . Anteriormente estaba usando la biblioteca MoreLinq para usar DistinctBy() para aplicarlo en la propiedad específica.
Ahora que actualicé TargetFramework a .NET 6 , este cambio viene con soporte incorporado para DistinctBy() .
Ahora el compilador está confundido acerca de qué DistinctBy() debe seleccionar, no puedo confiar en System.Linq , porque la eliminación del using MoreLinq causará muchos otros errores.
Sé que si nos enfrentamos a la ambigüedad entre los mismos métodos, entonces podemos usar el using alias , pero no estoy seguro de cómo usar el using alias para los métodos de extensión de Linq.
Aquí está el error:
Puedo replicar el mismo problema en el siguiente violín
No puede crear un alias para un método de extensión, pero puede llamar a la extensión como un método normal, utilizando el espacio de nombres completo. Después de todo, los métodos de extensión son realmente azúcar sintáctico. Por ejemplo (usando los mismos datos que proporcionó en su violín):
var inputs = new [] { new {Name = "Bruce wayne", State = "New York"}, new {Name = "Rajnikant", State = "Tamil Nadu"}, new {Name = "Robert Downey jr", State = "Pennsylvania"}, new {Name = "Dwane Johnson", State = "Pennsylvania"}, new {Name = "Hritik", State = "Maharashtra"} }; var net6DistinctBy = System.Linq.Enumerable.DistinctBy(inputs, x => x.State); var moreLinqDistinctBy = MoreLinq.MoreEnumerable.DistinctBy(inputs, x => x.State);Para evitar conflictos al usar MoreLinq, sin dejar de usarlos como métodos de extensión, puede importar los métodos de MoreLinq que necesite de esta manera:
using static MoreLinq.Extensions.LagExtension; using static MoreLinq.Extensions.LeadExtension;Entonces, en su caso, podría simplemente eliminar MoreLinq de sus usos y luego importar cualquier método de extensión de MoreLinq que necesite en el archivo individualmente como se muestra arriba.
Puedes leer sobre esto en la página de MoreLinq Github