Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Query till Linq

Postades av 2008-01-09 16:19:23 - Niclas Pehrsson, i forum arkitektur, Tråden har 10 Kommentarer och lästs av 1529 personer

Hej jag söker lite ide'er om hur jag kan få ett liknande queryspråk att översättas och användas av LINQ.

I mitt ändamål vill jag söka i listor och objekt som är kopplade mot varandra.

Säg att jag har ett Queryspråk som användaren skall kunna skriva in t.ex.

Number < 5 && Number > 1 || Number = 10 && Transaktioner.Count > 5 && ...

Det hade inte varit några problem alls för mig att översätta det om det inte hade varit en massa olika med && och || (and och or).

Jag har kikat lite på NPath som fungerar såhär, men jag tycker att den går lite för sakta och vill helst göra detta med Linq. Är det någon som har några tips eller ide'er på hur jag skall tackla detta problemet.
Nickemannen besöker forumet just nu IP Rapportera inlägget


Svara

Sv: Query till Linq

Postades av 2008-01-09 22:12:42 - Johan Normén

hej,

är inte helt med.

Varför vill du att användaren skall skriva ett visst språk som du sedan vill översätta till LINQ?
Eller menar du att du vill ha din egna Linq implementation som översätter LINQ till din query mot ditt ramverk? för det är så Linq fungerar inte tvärt om.

Tanken och idén med Linq är att få Linq att nyttjas av alla typer för slippa massa olika queryspråk.

"I mitt ändamål vill jag söka i listor och objekt som är kopplade mot varandra. "
- Här är det bara att köra Linq to objects. Hur smidigt som helst.

mvh Johan


Svara

Sv:Query till Linq

Postades av 2008-01-10 09:25:09 - Niclas Pehrsson

Ja det hade varit skönt att slippa query's men den queryn jag skrev i frågan var det användaren av systemet skall kunna skriva in.

Säg att jag har en lista med konton, användaren har då ett textfält där han kan fylla i

>5 om han vill ha ut alla konton under 5 osv så t.ex.

>5 || = 10
sedan kan det komma en annan rad där jag har en fråga om antal transaktioner där kan kunden skriva in en liknande query sedan läggs dessa ihop så det blir följande
(>5 || = 10 && != 100 ) && (query för transaktioner)

och eftersom jag vet ifrån vilka fält saker kommer kan jag lägga in

(account.Number >5 || account.Number = 10 ) && (query för transaktioner)

osv... men detta kan jag inte sedan enkelt övers'ätta till Linq. I början tänkte jag vara smart och gå igenom numren och dela upp och lägga i en lista för att sedan parsa med linq men när AND och OR kommer in så tycker jag att det kan bli krångligt.

Därför undrar jag hur jag skall tackla det.


Svara

Sv: Query till Linq

Postades av 2008-01-10 13:02:15 - Andreas Thorarins


du kan dynamiskt bygga upp källkod och i runtime kompilera den.
så du kan ta queryn från din user och använda den via tex. linq.

finns flera artiklar på nätet om hur man dynamiskt kompilerar kod tex.

http://www.west-wind.com/presentations/dynamicCode/DynamicCode.htm


Svara

Sv:Query till Linq

Postades av 2008-01-10 16:33:14 - Chris Klug

Finns ett dynamic linq library som gör att du kan bygga LINQ queries baserat på text. Borde kanske göra det lättare för dig om jag inte missförstått allt...
Mer info finns här:

http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx


Svara

Sv: Query till Linq

Postades av 2008-01-11 08:03:40 - Johan Normén

Grejen är att Linq skapades för att "Slippa" ha olika querysrpåk utan bara ett dvs Linq.
Så jag personligen tycker nog inte det är så bra idé att mappa Query till Linq som sedan i sin tur mappar om sig till nått annat. Det blir mycket kaka på kaka.
Men om inte prestanda är ett krav kan du ju mycket väl göra så som du vill.
Men om prestanda vore ett krav, är det nog bäst att hitta en annan lösning för din kund, eller generera
kundens query direkt till navigeringskod så som Linq to Object gör.

Du verkar ha en komplicerad applikation :-) Antar att dina användare är tekniskt lagda?
Har erfarenhet av fleranvändare att det inte brukar gå så bra att tvinga på dem ett egen påhittat query
:-(

Mvh Johan


Svara

Sv: Query till Linq

Postades av 2008-01-11 09:00:16 - Roger Alsing

När du säger "översätta till linq" vad menar du då?

Du vill ha ett DSL (domain specific language) för queries.
och om en användare skriver en fråga i ditt DSL , så vill du omvandla frågan till vad?
En delegat av en linq query?
Eller vill du exekvera frågan mot en linq2sql lista?

Om det var ett tag sedan du testade NPath så skulle du kunna testa att dra ner det från vår SVN.
Vi hade en bugg i cachningen av kod för att läsa properties, så det gav en ganska stor prestanda hit.
Den är dock fixad sedan ett tag tillbaka.

Det är ju dessutiom fullt möjligt att använda bara själva parsern ur NPath, och sedan göra vad man vill med den AST som kommer ut.

Beskriv gärna mer vad du försöker göra... jag har lite fettish för parsning av kod :-P


Svara

Sv:Query till Linq

Postades av 2008-01-11 10:36:53 - Niclas Pehrsson

Det är ekonomer som är målgruppen, de skall söka i såkallade SIE filer.
Jag har gjort en import av SIE filer och har all data i en snygg objektmodell som jag nu vill att dom skall söka i.

En utsökningsfråga kan se ut följande.

Jag vill ha konton som matchar denna beskrivning.

Jag vill hämta alla konton mellan 1010-2000 fast inte konto 1500 och jag vill ha konto 3000.

Då kan kunden i det nuvarande systemet som skall bytas ut skriva

1010-2000 & <> 1500 , 3000

, = || = eller
& = && = och

Efter detta kan kunde välja att fylla i vidare information ett konto kan ha 0 till flera transaktioner på sig då skall kunden kunna efterfråga jag vill ha dessa konton men kontona måste inneha fler än 3 transaktioner men mindre än 10 då fylls detta i i nästa fält.

3-10

Sedan läggs ju detta ihop i bakgrunden får man ju hålla reda på vad som kommer från vilket fält.
Att dela upp allting och fylla en Lista med kriterier som man kan köra mot objektmodellen är inga problem sålänge vilkoret är eller mellan siffrorna men när det blandas både och och eller så börjar det bli klurigt.

Jag har funderat på om det kan finnas något bra sätt på att dela upp queryn så att man får en lista så där saker kan bero på varandra, men det känns som ett ganska stort projekt.
Just nu använder jag mig av NPath, men skulle vilja gå över till LiNQ.

NPath har annars fungerat ganska bra men den saknar lite småsaker som gör att det blir svårare och mer komplext. Men jag inser ju att LiNQ antagligen hade kunnat få upp prestandan lite.


Svara

Sv: Query till Linq

Postades av 2008-01-14 10:23:14 - Johan Normén

Linq är inte direkt snabbt. Dvs det går snabbare att bygga den kod Linq skapar manuellt, men det är just därför Linq finns för att man skall slippa det jobbet.

Nu har jag bara gjort enkla mätningar mellan navigeringskod som jag skrivit och Linq kod för samma sak. (Linq to Object då). Reultatet blev att min egna kod var ca 3ggr snabbare än Linqen.

Du har ett svårt fall allmänt att lösa. Andra ekomomisystem med liknande fall fick helt enkelt begränsa vissa funktioner mot användaren för för att få sina sina system användarvänliga.

Vet ett system där vi sorterade ut saker via dropdowns. Där man sedan när litan kom fick sortera eller
filtrera igen. Dock hade vi ingen exluderar funktion som du vill ha. Detta fick kunden själv exkludera från listan om han/hon skrev ut den etc...

Jag tror NPath är snabbare i ditt fall än om du skall kompilera om till Linq.
För först måste du bygga en liten Kompiler för dina uttryck. Sen måste du skapa Linq kod som i sin tur skall kompileras till den bakomliggande exensionkod Linq använder. Som i sin tur skall skapa navigeringskoden åt dig.

Du skapar typ 3 lager av automagisk kod. :-(

Mvh Johan


Svara

Sv:Query till Linq

Postades av 2008-01-14 13:54:03 - Niclas Pehrsson

Du har rätt, NPath fungerar faktiskt toppen och verkar vara tillräckligt snabbt hitills.

Jag anser att NPath är en bra motor och jag undrar om den utvecklas/vidareutvecklas som det är för den saknar lite delar. Idag går det att köra metoder via den men det går inte att köra metoder som retunerar ett objekt som man hämtar ut ett värde på t.ex.

Konto.GetYearBy(1999).Value osv.. men annars är den mycket bra.


Svara

Sv: Query till Linq

Postades av 2008-01-14 14:01:45 - Roger Alsing

Vi vet inte riktigt vad vi ska göra med NPath just nu.

Jag och Mats sitter o skissar på NPersist2 (för .net 3.5)
och där blir det ju linq som gäller.

Så behovet av npath för vår egen del har ju i princip försvunnit.


Svara

Nyligen

  • 08:28 Butiksskyltar: Hur upplever utbude
  • 22:31 Slappna av
  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 764
27 959
271 761
370
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies