Wir möchten eine Liste der Orte in der Nähe von der Datenbank mit LINQ in ASP.NET 2012 erhalten und möchten ein Feedback zu unserer Strategie.Verwenden von LINQ Suchen Sie Orte in der Nähe aus der Datenbank
Mein Tisch und gefälschte Daten:
PlaceId Name Latitude Longitude
1 A 18.1 20.1
2 B 18.2 20.2
3 C 18.3 20.3
1) In unserem Projekt des Client aktuelle Standort (Breitengrad und Längengrad) als Eingabe genommen Bei der Server-Seite
2), in Abhängigkeit von der aktuelle Standort des Clients, müssen wir in der Nähe von der Datenbank mit LINQ
Finden Sie den Code für SQL, die ich früher verwendet, aber jetzt wollen wir LINQ verwenden.
SELECT name, Latitude, Longitude ,
(3959 * acos(cos(radians(?))* cos(radians(Latitude)) * cos(radians(Longitude) - radians(?))
+ sin(radians(?)) * sin(radians(Latitude)))) AS distance
FROM TABLE_NAME
HAVING distance < ?
ORDER BY distance LIMIT 0 , 20
[Aber die Frage ist, wie eine solche Abfrage in LINQ zu schreiben.]
Meine Arbeit auf diesem:
Während für die Lösung suchen, stieß ich auf diesem Code
var Value1 = 57.2957795130823D;
var Value2 = 3958.75586574D;
var searchWithin = 20;
double latitude = ConversionHelper.SafeConvertToDoubleCultureInd(Latitude, 0),
longitude = ConversionHelper.SafeConvertToDoubleCultureInd(Longitude, 0);
var location = (from l in sdbml.Places
let temp = Math.Sin(Convert.ToDouble(l.Latitude)/Value1) * Math.Sin(Convert.ToDouble(latitude)/Value1) +
Math.Cos(Convert.ToDouble(l.Latitude)/Value1) *
Math.Cos(Convert.ToDouble(latitude)/Value1) *
Math.Cos((Convert.ToDouble(longitude)/Value1) - (Convert.ToDouble(l.Longitude)/Value1))
let calMiles = (Value2 * Math.Acos(temp > 1 ? 1 : (temp < -1 ? -1 : temp)))
where (l.Latitude > 0 && l.Longitude > 0)
orderby calMiles
select new location
{
Name = l.name
});
return location .ToList();
Aber das Problem ist, wie Referenz ConversionHelper oder unter welchen Namespace es kommt.
Alle Ratschläge sind willkommen.
Warum nicht eine gespeicherte Prozedur verwenden? Sie können das Ergebnis eines gespeicherten Proc einem Objekt auf die gleiche Weise zuordnen, wie Sie eine Tabelle zuordnen würden, z. getClosePlaces_Result. –
Entschuldigung, ich sollte erwähnen, dass Sie angeben können, dass der Rückgabetyp eine Liste von Standorten ist, wenn Sie das möchten. –
@JuannStrauss abgesehen von offensichtlichen Auswirkungen auf die Codeabhängigkeit, fragt das OP, wie man das in C# macht ;-) –