2012-02-01 10 views

Odpowiedz

-2

To nie jest możliwe, przynajmniej jeśli chcesz stworzyć zapytań ad hoc w JavaScript. Linq (dowolnego smaku) jest technologią kompilatora. Zapytanie z użyciem składni Linq lub wyrażeń Linq jest obsługiwane przez kompilator C# lub VB, a nie interpretowane bezpośrednio przez bazę danych.

Konwencjonalny sposób to zrobić za pośrednictwem usługi sieci Web w języku C#, przy użyciu Linq do pobierania i przechowywania danych i prezentacji czyste API dla klientów. Następnie klient może korzystać z usługi za pośrednictwem wywołań AJAX.

1

Powinieneś sprawdzić strukturę edge.js, łączy on node.js z .Net. Jednym ze sposobów byłoby użycie wbudowanej obsługi T-SQL z przewagą, a następnie użycie czegoś takiego jak linq.js do manipulowania wynikami.

var getTop10Products = edge.func('sql', function() {/* 
    select top 10 * from Products 
*/}); 

getTop10Product(null, function (error, products) { 
    if (error) throw error; 
    console.log(products); 
}); 

W przeciwnym razie, można skonfigurować połączenie datacontext EF w bibliotece .NET i wołać do tego przy użyciu LINQ

var getTop10Product = edge.func(function() {/* 
    async (input) => { 
     using (var db = new ProductContext()) 
     { 
     //Linq to EF query 
     var query = from b in db.Products 
        orderby b.Name 
        select b; 
     return query.Take(10).ToList(); 
     } 
    } 
*/}); 
0

natknąłem to pytanie dzisiaj zastanawiałem się to samo, a po trochę więcej szukałem natknąłem się na Squel.

Cytując bezpośrednio z ich strony internetowej:

//this code 
squel.select() 
    .from("students") 
    .field("name") 
    .field("MIN(test_score)") 
    .field("MAX(test_score)") 
    .field("GROUP_CONCAT(DISTINCT test_score ORDER BY test_score DESC SEPARATOR ' ')") 
    .group("name") 
); 

/* will return this SQL query as a string: 
    SELECT 
     name, 
     MIN(test_score), 
     MAX(test_score), 
     GROUP_CONCAT(DISTINCT test_score ORDER BY test_score DESC SEPARATOR ' ') 
    FROM 
     students 
    GROUP BY 
     name 
*/ 

Mam nadzieję, że przyczyni się to do każdego, kto się w całej tej kwestii podczas wyszukiwania.

Powodzenia!

PS: < Włóż standardowy disclaimer o nie generowanie zapytań SQL w przeglądarce ... >

Jeśli tworzysz po stronie klienta JavaScript, który będzie wysyłał zapytania SQL do bazy danych otworzyć całą puszkę Pandory - jeśli przeglądarka może dyktować zapytanie SQL, a użytkownik może manipulować tym, co pochodzi z przeglądarki, wówczas jest podatny na SQL injection attacks.

Dolna linia: nie używaj tego w przeglądarce!

3

Dzisiaj, JayData http://jaydata.org/ zrób to.

Można użyć nowego ES6 Strzałka składni funkcji, która wygląda bardzo podobnie do C# (z poziomu przeglądarki, która obsługuje go, jak Ostatnia Firefox, lub transpiler, jak maszynopis lub Traceur):

todoDB.Todos 
    .filter(todo => todo.Completed == true) 
    .map(todo => todo.Task) 
    .forEach(taskName => $('#list') 
    .append('Task: ' + taskName + ' completed')); 

Zapytanie zostanie przekonwertowany na zapytanie SQL (select Task from Todos where Completed = true) lub parametr filtru URL $ (http://.../?$filter=Completed%20eq%201&$select=Task), w zależności od źródła danych ...

2

Zacząłem od wariantu JS LS do jednostek w tym tygodniu.Sprawdzić UniMapperJS

Przykład

var comments = await Comment.getAll() 
.where(e => e.author.endsWith("something") || e.author.startsWith("somethingElse")) 
.orderByDescending("created") 
.limit(10) 
.skip(0) 
.exec(); 

Ale cuz ograniczenia JS, trudno było zorientować się, jak przyjmować zmienne w gdzie dlatego, że funkcje strzałek są przetwarzane jako ciąg. Rozwiązałem go za pomocą "wirtualnej" zmiennej ($) i listy argumentów jako ostatniego parametru.

var comments = await Comment.getAll() 
.where(e => e.author.endsWith($) || e.author.startsWith($), filter.endsWith, filter.name) 
.orderByDescending("created") 
.limit(10) 
.skip(0) 
.select(e => e.author) 
.exec(); 
Powiązane problemy