4 votes

Linq to NHibernate - La méthode Cos n'est pas implémentée

Dans Linq to NHibernate, j'essaie de renvoyer les entreprises situées à une certaine distance d'un utilisateur. Voici ce que j'ai jusqu'à présent :

var query = from b in ActiveRecordLinq.AsQueryable<Business>()
                        where (3959 * Math.Acos(Math.Cos((Math.PI * coordinates.Latitude / 180)) * Math.Cos((Math.PI * b.Latitude / 180))
                            * Math.Cos((Math.PI * b.Longitude / 180) - (Math.PI * coordinates.Longitude / 180))
                            + Math.Sin((Math.PI * coordinates.Latitude / 180)) * Math.Sin((Math.PI * b.Latitude / 180)))) <= radiusInMiles
                        orderby b.Name ascending
                        select b;
            return query.ToList();

Malheureusement, il semble que la classe mathématique C# ne soit pas prise en charge par Linq to NHibernate, ce qui donne lieu à l'erreur suivante :

La méthode Cos n'est pas mise en œuvre

Comment pourrais-je contourner ce problème ?

Merci ! Justin

3voto

Paco Points 6156

Vous pouvez faire trois choses :

  1. Implémentez-le et soumettez un patch à NHibernate pour que tout le monde puisse utiliser votre implémentation.
  2. Créez un test unitaire défaillant qui isole le problème, soumettez-le à NHibernate Jira et attendez que quelqu'un d'autre le mette en œuvre.
  3. N'utilisez pas Linq, mais du simple sql ou du hql mixte pour cette requête.

Vous rendrez certaines personnes heureuses en choisissant l'option 1.

1voto

Diego Mijelshon Points 40314

Vous ne pouvez pas utiliser de fonctions .Net arbitraires dans les requêtes Linq côté serveur.

Vous pouvez utiliser des fonctions côté serveur avec HQL.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X