Probleem
Heb de volgende filter voor IQToolkit (LINQ to SQL):
Plaksel 1:
Deze kan vervolgens bovenop IQToolkit gezet worden, zodat uit de personentabel alleen de mensen worden gehaald die nederlands spreken (in dit voorbeeld).
De conditie geld voor alle SELECT statements, maar ik wil graag dat UPDATE en DELETE statements ook langs deze expressie gaan. Een persoon is in dit geval dan alleen gerechtvaardigd om SELECT, UPDATE en DELETE uit te voeren op nederlands talige gebruikers.
Nu de vraag, ik heb een Person object, like:
Dit wil ik valideren met bovenstaande expressie.
Wat heb ik geprobeerd:
[list]• http://tomasp.net/blog/dynamic-linq-queries.aspx
• http://blogs.msdn.com/b/m...rate-dynamic-methods.aspx
• http://msdn.microsoft.com/en-us/library/bb397951.aspx
Gebruikte software:
[list]• IQToolkit
Wie o wie kan mij op weg helpen?
Heb de volgende filter voor IQToolkit (LINQ to SQL):
Plaksel 1:
C#:
1
2
3
4
5
6
7
8
9
| var languageCondition = ( from ll in tables.Languages() where ll.LanguageName == "Dutch" select ll.LanguageId).ToArray(); Expression<Func<IEnumerable<Entities.Person>, IEnumerable<Entities.Person>>> _ mijnExpressie = p => from pp in p where languageCondition.Contains(pp.LanguageId) select pp; |
Deze kan vervolgens bovenop IQToolkit gezet worden, zodat uit de personentabel alleen de mensen worden gehaald die nederlands spreken (in dit voorbeeld).
De conditie geld voor alle SELECT statements, maar ik wil graag dat UPDATE en DELETE statements ook langs deze expressie gaan. Een persoon is in dit geval dan alleen gerechtvaardigd om SELECT, UPDATE en DELETE uit te voeren op nederlands talige gebruikers.
Nu de vraag, ik heb een Person object, like:
C#:
1
2
3
4
| var person = new Entities.Person(); person.Firstname = "Een naam"; person.Lastname = "Iets anders"; person.LanguageId = 8; |
Dit wil ik valideren met bovenstaande expressie.
Wat heb ik geprobeerd:
- De where clause los te trekken, echter IQToolkit wil het vertalen naar SQL, en ziet een Userfunction staan als where clause, iets wat hij niet kan vertalen, in ieder geval niet op de volgende manier:
C#:1 2 3 4
Expression<Func<IEnumerable<Entities.Person>, IEnumerable<Entities.Person>>> _ mijnExpressie = p => from pp in p where mijnCheckFunctie(pp.LanguageId) // <--- Niet mogelijk select pp;
- Een list van mn te update'n object te maken, en deze in de Expressie zetten, zodat ik alleen de UPDATE objecten terugkrijg die mogen worden gedaan, echter bij een Func zou dit gaan met:
C#:1 2
// mijnExpressie komt uit "Plaksel 1" var nieuweList = mijnExpressie(listVanPersons);
Een dergelijke constructie zou leuk zijn, BatchUpdate zou dan ook behoren tot de mogelijkheid. Echter van een Func maak je geen expression [url=http://stackoverflow.com/questions/767733/converting-a-net-funct-to-a-net-expressionfunct](bron)[/.
- List maken en deze door de select expressie laten gaan, zodat je alleen objecten terug krijgt die geupdate mogen worden, echter ik heb geen idee hoe dit te doen met een Expression<Func<,>>
- De where clause loskoppelen en dan de list (met updateble objects) met deze where clause valideren (.Where(Expression<>)), echter moet dit compatible zijn met IQToolkit, en deze kan geen user functions omzetten (wel Array's of Expressies)
- ...
[list]• http://tomasp.net/blog/dynamic-linq-queries.aspx
• http://blogs.msdn.com/b/m...rate-dynamic-methods.aspx
• http://msdn.microsoft.com/en-us/library/bb397951.aspx
Gebruikte software:
[list]• IQToolkit
Wie o wie kan mij op weg helpen?
[ Voor 4% gewijzigd door XiniX88 op 18-03-2011 09:21 ]