Appel SQL, la fonction définie par l'Utilisateur dans une requête LINQ
Je vais avoir un moment difficile l'obtention de ce travail. Je suis en train de faire un radius de recherche avec le Filtre suivant d'aide sur un IQueryable. Il y a un ensemble d'autres filtres appliquée avant RadiusSearch s'applique. L'ordre ne devrait pas vraiment d'importance puisque le but est d'obtenir la requête doit être reporté jusqu'à ce qu'un ToList ().
public static IQueryable<ApiSearchCommunity> RadiusSearch(this IQueryable<ApiSearchCommunity> communities)
{
var centerLatitude = 30.421278;
var centerLongitude = -97.426261;
var radius = 25;
return communities.Select(c => new ApiSearchCommunity()
{
CommunityId = c.CommunityId,
City = c.City,
//Distance = c.GetArcDistance(centerLatitude, centerLongitude, c.Latitude, c.Longitude, radius)
});
}
Je peux en quelque sorte écrire une aide comme GetArcDistance ci-dessus, qui appelle à son tour un UDF sur SQL? La requête que je suis en train de générer est la suivante
SELECT
comms.community_id,
comms.city,
comms.distance
FROM (
SELECT
c.community_id,
c.city,
dbo.udf_ArcDistance(
30.421278,-97.426261,
c.community_latitude,
c.community_longitude
) AS distance
FROM communities c) AS comms
WHERE comms.distance <= 25
ORDER BY comms.distance
Quelle est la version de l'entité cadre utilisez-vous?
Je suis l'aide de la version 5.
Avez-vous vérifié Spatiale des types de soutien en EF? msdn.microsoft.com/en-us/data/hh859721.aspx
Je suis l'aide de la version 5.
Avez-vous vérifié Spatiale des types de soutien en EF? msdn.microsoft.com/en-us/data/hh859721.aspx
OriginalL'auteur Praveen | 2013-11-21
Vous devez vous connecter pour publier un commentaire.
Ok, je crois que je comprends la question - l'essentiel, c'est que vous voulez être en mesure de téléphoner à un SQL UDF dans le cadre de votre requête Linq to entities.
C'est si vous utilisez la base de données ou le premier modèle:
Cet article explique comment faire: http://msdn.microsoft.com/en-us/library/dd456847(SV.100).aspx
Pour résumer, vous devez d'abord modifier votre fichier edmx dans un éditeur xml, dans l'edmx:StorageModels >> le Schéma de l'article, vous devez spécifier une cartographie de votre sql udf, par exemple,
Ensuite, vous devez créer une fonction statique quelque part avec le EdmFunction attribut sur elle, quelque chose comme ceci:
Cette méthode permettra d'obtenir mappé à l'UDF, au moment de la requête par entity framework. Le premier attribut argument est le magasin de l'espace de noms que vous pouvez trouver dans votre edmx fichier xml sur l'élément de Schéma (espace de Noms). Le deuxième argument est le nom de l'udf.
Vous pouvez ensuite appeler quelque chose comme ceci:
Espère que cette aide.
OriginalL'auteur Matt Whetton
si vous utilisez
Code-First
approche, alors vous ne peut pas appel de fonctions définies par l'utilisateur que vous voulez (comme de EF6) - voici la la preuve, et un autre. Vous êtes seulement limité à l'appel de l'UDF, comme un partie de votre requête SQL:ce qui est laid de l'OMI et sujette à erreur.
Aussi - ce MSDN page dit:
qui essentiellement signifie que vous devrez utiliser
Model-First
approche pour appeler des fonctions définies par l'utilisateur.ok - puis @Matt réponse est ce que vous avez besoin. Je vais garder ma réponse dans le cas où quelqu'un serait à la recherche.
Oui, je suis à la recherche pour le Code de la première version et je vais poster ce qui semble être un travail autour de... créer une ligne de sql appel et de renvoyer la valeur nécessaire
OriginalL'auteur avs099