Hej jag söker lite ide'er om hur jag kan få ett liknande queryspråk att översättas och användas av LINQ. hej, 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. 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... Grejen är att Linq skapades för att "Slippa" ha olika querysrpåk utan bara ett dvs Linq. När du säger "översätta till linq" vad menar du då? Det är ekonomer som är målgruppen, de skall söka i såkallade SIE filer. 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. Du har rätt, NPath fungerar faktiskt toppen och verkar vara tillräckligt snabbt hitills. Vi vet inte riktigt vad vi ska göra med NPath just nu.Query till 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äggetSv: Query till Linq
ä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 JohanSv:Query till Linq
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.Sv: Query till Linq
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.htmSv:Query till Linq
Mer info finns här:
http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspxSv: Query till 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 JohanSv: Query till Linq
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 :-PSv:Query till Linq
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.Sv: Query till Linq
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 JohanSv:Query till Linq
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.Sv: Query till Linq
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.