vogliamo ricevere la lista dei luoghi vicini dal database utilizzando LINQ in ASP.NET 2012 e vorrebbe un feedback sulla nostra strategia.Utilizzando LINQ trovare luoghi vicini dal database
Il mio tavolo e dati falsi:
PlaceId Name Latitude Longitude
1 A 18.1 20.1
2 B 18.2 20.2
3 C 18.3 20.3
1) Nel nostro progetto la posizione attuale del client (latitudine e longitudine) è preso come input
2) Al lato server, a seconda della la posizione corrente del cliente, abbiamo bisogno di trovare luoghi vicini dal database utilizzando LINQ
Ecco il codice per SQL che ho già usato, ma ora vogliamo usare LINQ.
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
[Ma la domanda è come scrivere una tale query in LINQ.]
Il mio lavoro su questo:
Durante la ricerca di una soluzione, mi sono imbattuto in questo codice
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();
Ma il problema è, come fare riferimento a ConversionHelper o sotto quale spazio dei nomi viene.
Tutto consiglio è apprezzato.
Perché non utilizzare una stored procedure? Puoi mappare il risultato di un processo memorizzato su un oggetto nello stesso modo in cui mapperesti una tabella, ad es. getClosePlaces_Result. –
Spiacente, dovrei ricordare che è possibile specificare che il tipo restituito è un elenco di posizioni, se questo è ciò che si desidera. –
@JuannStrauss a parte le ovvie conseguenze sulla dipendenza del codice, l'OP sta chiedendo come farlo in C# ;-) –