[.Net] Linq

Pagina: 1
Acties:
  • 521 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • creator1988
  • Registratie: Januari 2007
  • Laatst online: 11-09 14:44
Ik heb een maandje of twee voor het eerst even kort gespeeld met Linq, om een XML bestand van een leverancier enigszins gemakkelijk te verwerken: ik vond het mooi werken maar heb er even niets mee gedaan.

Nu moest ik vandaag even een paar analyses doen (paar honderd objecten van een eigen type), en ik verbaas me weer over de eenvoud en logica achter het systeem! Met 4 regels code haal ik de gewenste informatie uit de objecten, voer hier wat berekeningen op uit en print het hele zootje netjes gesorteerd op mijn berekeningen; met intellisense!

spoiler:
Ja echt hoor! Commentanalyse voor de universiteit :9

Dim p = From pos As WeblogAnalyse In postanalyse Select pos.blognaam, pos.reactie_Zinslengte, pos.reactie_Woordlengte, pos.reactie_aantal, pos.post_aantal Order By (reactie_Woordlengte / reactie_aantal) Descending
For Each blog In p
TextBox2.Text &= blog.blognaam & " - " & Math.Round((blog.reactie_Zinslengte / blog.reactie_aantal), 2) & " - " & Math.Round(blog.reactie_Woordlengte / blog.reactie_aantal, 2) & vbCrLf & vbCrLf
Next


Tot zover het marketinggebral: zijn er mensen hier die uberhaubt Linq gebruiken, waarom wel/waarom niet, op welke soort datasets etc.?

Mocht er al een linq fanclub zijn, ik meldt me al bij voorbaat aan :>

Language INtegrated Query of LINQ is een project van Microsoft voor het uitbreiden van het .NET Framework voor een meer uniforme omgang met gegevens uit heel verschillende systemen, bijvoorbeeld gegevens uit een relationele database, een XML-bestand of een array. Het doel is dat al deze verschillende soorten gegevens met één op SQL lijkende set taalelementen kunnen worden opgevraagd, gemanipuleerd en gecombineerd. Het vormt een alternatief voor XPath, XQuery en SQL. De programmeertalen C# en Visual Basic .NET zullen LINQ ondersteunen. (wikipedia)

Ergo: je kunt sql-like syntax gebruiken om allerlei soorten datasets te benaderen, dit kunnen bijvoorbeeld arrays, databaserecords of xml bestanden zijn.

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 17:34
Ik heb er al eens mee gespeeld, voor het querien op in-memory collections of om gebruik te maken van de 'light weight' xml syntax.
Echter, LINQ for SQL heb ik nog niet echt gebruikt; ik ben ook van mening dat er momenteel betere / meer mature oplossingen zijn voor deze specifieke toepassing (linq for sql dus). Ik denk dan bv aan NHibernate, LLBLGen, etc...

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • Marcj
  • Registratie: November 2000
  • Laatst online: 11:27
Ik heb op het werk wel een collega die het al meerdere malen gebruikt heeft, en hij is er ook heel enthousiast over. Hij gebruikt het nu heel vaak. Het enige nadeel dat ik hoorde, is dat het debuggen wel wat lastiger wordt.

Acties:
  • 0 Henk 'm!

  • EfBe
  • Registratie: Januari 2000
  • Niet online
btw '/' doet al een round, Math.Round aanroepen op int divides is onzin. Verder loopt je code een division by zero risico bij 0 reacties ;)

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


Acties:
  • 0 Henk 'm!

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 05-09 14:39

_Thanatos_

Ja, en kaal

Ik gebruik zelf vooral LINQ to SQL, hoewel ik onze DBA's er nog van moet overtuigen dat de inloggende user daarmee niet voldoende heeft aan alleen stored procedure-rechten ;)

Verder is het ook gewoon handig om data uit een doodnormale array of list te filteren en te sorteren. Zo had ik laatst bijvoorbeeld dat ik de CultureInfos in een combobox moest gieten:
C#:
1
2
3
4
var data = from c in CultureInfo.GetCultures(CultureTypes.SpecificCultures)
           orderby c.EnglishName
           select new { Code = c.LCID, Name = c.EnglishName };
//En dan dus de datasource zetten en netjes binden

Het is dus niet alleen voor SQL, XML en entities :)

[ Voor 4% gewijzigd door _Thanatos_ op 28-01-2008 17:21 ]

日本!🎌


Acties:
  • 0 Henk 'm!

  • creator1988
  • Registratie: Januari 2007
  • Laatst online: 11-09 14:44
EfBe schreef op maandag 28 januari 2008 @ 17:17:
btw '/' doet al een round, Math.Round aanroepen op int divides is onzin. Verder loopt je code een division by zero risico bij 0 reacties ;)
0 reacties komen niet voor, en dit is gewoon een stukje basisanalyse ;)
Math.Round is helemaal geen onzin, ik zie liever (100/3=33,33) dan (100/3=33,3333333333333); Verder is woordlengte een double :9 (namelijk de gemiddelde woordlengte over een X duizend comments op een bepaalde blog).

Acties:
  • 0 Henk 'm!

  • Gé Brander
  • Registratie: September 2001
  • Laatst online: 06-09 09:32

Gé Brander

MS SQL Server

Hoe zit het eigenlijk met performance op grote databases met Linq? Zijn daar al ervaringen mee? Ik ben heel benieuwd hoe het zich dan gedraagd richting de database... Iemand?

Vroeger was alles beter... Geniet dan maar van vandaag, morgen is alles nog slechter!


Acties:
  • 0 Henk 'm!

  • creator1988
  • Registratie: Januari 2007
  • Laatst online: 11-09 14:44
c70070540 schreef op maandag 28 januari 2008 @ 17:43:
Hoe zit het eigenlijk met performance op grote databases met Linq? Zijn daar al ervaringen mee? Ik ben heel benieuwd hoe het zich dan gedraagd richting de database... Iemand?
http://blogs.msdn.com/ric...l-performance-part-4.aspx

Hier wat performance tables, vrij snel dus :*)

Acties:
  • 0 Henk 'm!

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Ik heb voornamelijk ervaring met Linq to XML en dat werkt erg prettig moet ik zeggen. Een compact en duidelijke manier om aan te geven wat je wil hebben. Zowiezo is de hele nieuwe manier van XML opbouwen en uitlezen stukken prettiger geworden, daar was ook veel in te verbeteren.
Linq to SQL heb ik nog geen ervaring. Ik gebruik hiervoor O/R mappers, die vaak qua functionaliteit net meer hebben (uitgebreide polymorphisme bv).

Acties:
  • 0 Henk 'm!

  • Not Pingu
  • Registratie: November 2001
  • Laatst online: 05-08 09:21

Not Pingu

Dumbass ex machina

whoami schreef op maandag 28 januari 2008 @ 17:06:
Echter, LINQ for SQL heb ik nog niet echt gebruikt; ik ben ook van mening dat er momenteel betere / meer mature oplossingen zijn voor deze specifieke toepassing (linq for sql dus). Ik denk dan bv aan NHibernate, LLBLGen, etc...
LINQ to SQL is gewoon te beperkt om echt interessant te zijn voor niet-hobbyisten. Het Entity Framework icm. LINQ to Entities daarentegen ziet er heel krachtig uit en lijkt me een kandidaat om NHibernate en andere ORM-oplossingen voor .NET overbodig te maken.

Wat ik me afvraag is hoe geschikt LINQ is voor het queryen van datastructuren die niet zoveel weghebben van relationale databases. Dan denk ik bijv. aan search trees/graphs en dergelijke.

[ Voor 13% gewijzigd door Not Pingu op 28-01-2008 20:38 ]

Certified smart block developer op de agile darkchain stack. PM voor info.


Acties:
  • 0 Henk 'm!

  • EfBe
  • Registratie: Januari 2000
  • Niet online
Ik zou me hier niet blind op staren, niemand heeft deze cijfers kunnen benaderen. De queries zijn over het algemeen wel aardig, maar Linq to Sql (en laten we aub Linq to Sql niet verwarren met Linq) heeft een aantal dingen gewoonweg niet, zoals hierarchische fetches, ondanks de halfbakken 'loadoptions' feature die accuut het loodje legt bij meerdere 1:n relaties.

Linq to Sql is verder soms goed in het verzinnen van queries maar soms ook echt een v1.0 product. probeer dit maar eens te fetchen op northwind:
var q = (from e in nw.Employee select e).Distinct();

Hij genereert vrolijk een distinct query, terwijl dat niet kan.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


Acties:
  • 0 Henk 'm!

  • creator1988
  • Registratie: Januari 2007
  • Laatst online: 11-09 14:44
Ik kan niets zinvols zeggen over Linq to SQL omdat ik er nog niets mee gedaan heb; ik zal eens een testje draaien om te kijken of het wat is.

Welke ORM gebruiken jullie Orphix / Not pingu?

Acties:
  • 0 Henk 'm!

  • Orphix
  • Registratie: Februari 2000
  • Niet online
creator1988 schreef op dinsdag 29 januari 2008 @ 23:24:
Welke ORM gebruiken jullie Orphix / Not pingu?
Ik gebruik voornamelijk LLBLGen.

Acties:
  • 0 Henk 'm!

  • EfBe
  • Registratie: Januari 2000
  • Niet online
offtopic:
Ja ik weet het, de naam sucks ;) maar er zitten 3 L-en in ;)

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


Acties:
  • 0 Henk 'm!

  • Orphix
  • Registratie: Februari 2000
  • Niet online
EfBe schreef op woensdag 30 januari 2008 @ 12:52:
[...]

offtopic:
Ja ik weet het, de naam sucks ;) maar er zitten 3 L-en in ;)
Sorry :>

Acties:
  • 0 Henk 'm!

Verwijderd

Not Pingu schreef op maandag 28 januari 2008 @ 20:34:
LINQ to SQL is gewoon te beperkt om echt interessant te zijn voor niet-hobbyisten. Het Entity Framework icm. LINQ to Entities daarentegen ziet er heel krachtig uit en lijkt me een kandidaat om NHibernate en andere ORM-oplossingen voor .NET overbodig te maken.

Wat ik me afvraag is hoe geschikt LINQ is voor het queryen van datastructuren die niet zoveel weghebben van relationale databases. Dan denk ik bijv. aan search trees/graphs en dergelijke.
LINQ is gebaseerd op extension methods, lambda expressions en nog een paar andere enge dingen, in principe kun je het mechanisme overriden en/of uitbreiden zodat het ook voor andere structuren goed werkt. Als het maar IEnumerables oplevert.

Dat vind ik ook meteen het grote nadeel van LINQ, het vereist stiekem wel dat je weet dat dingen als out variables, delayed execution en deferred execution bestaan. Het lijkt gemaakt te zijn de ctrl+spatie rammen generatie, maar tegelijkertijd kun je met LINQ zo veel complexe fouten genereren dat het eigenlijk alleen vrij streng gebruikt zou mogen worden.

Laat onverlet dat ik als Javaan techneut soms wel een beetje jaloers ben op al die mooie ingewikkelde taalfeatures van C#. ;)

[ Voor 7% gewijzigd door Verwijderd op 30-01-2008 22:31 ]


Acties:
  • 0 Henk 'm!

  • cspare
  • Registratie: Oktober 2006
  • Laatst online: 29-07 22:19

cspare

What the deuce?!

Verwijderd schreef op woensdag 30 januari 2008 @ 22:29:
[...]
Laat onverlet dat ik als Javaan techneut soms wel een beetje jaloers ben op al die mooie ingewikkelde taalfeatures van C#. ;)
About that, zijn er nou eigenlijk voor java dergelijke alternatieven?

The one who says it cannot be done, should never interrupt the one who is doing it.


Acties:
  • 0 Henk 'm!

  • creator1988
  • Registratie: Januari 2007
  • Laatst online: 11-09 14:44
cspare schreef op woensdag 30 januari 2008 @ 23:11:
[...]

About that, zijn er nou eigenlijk voor java dergelijke alternatieven?
Een implementatie van Linq o.i.d. (nog?) niet, OR/M's wel, maar dat is alleen zinvol als je met je database wilt praten (en dus niet met andere objecten):
http://www.codeguru.com/c...erver/article.php/c10079/
Pagina: 1