The Microsoft LINQ (Language-INtegrated Query) Project. : ''"The LINQ Project is a codename for a set of extensions to the .NET Framework that encompass language-integrated query, set, and transform operations. It extends C# and Visual Basic with native language syntax for queries and provides class libraries to take advantage of these capabilities."'' : LINQ is a .NET implementation of the more general QueryLanguagesForInMemoryObjects concept. See http://msdn.microsoft.com/netframework/future/linq/ * DLinq = SQL Integration: http://msdn.microsoft.com/netframework/future/linq/default.aspx?pull=/library/en-us/dndotnet/html/linqprojectovw.asp#linqprojec_topic6 * XLinq = XML Integration: http://msdn.microsoft.com/netframework/future/linq/default.aspx?pull=/library/en-us/dndotnet/html/linqprojectovw.asp#linqprojec_topic7 ** See also http://www.xlinq.net/ for related information and blogs CsharpLanguage 3.0, VisualBasicDotNet 9.0, VisualStudio 2008 (code-named "Orcas") It provides convenient "set based" (really IEnumerable based) ExtensionMethods, integrated into the language. DLinq an ObjectRelationalMapping layer for all languages in the .Net CLR (CommonLanguageRuntime). Provides closer integration between host and SQL languages than EmbeddedSql, with LINQ's "set based" ExtensionMethods. Article: "Comparing LINQ and Its Contemporaries", by Ted Neward -- http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndotnet/html/linqcomparisons.asp Announced at the Microsoft ProfessionalDevelopersConference (PDC) 2005: * http://www.microsoft.com/presspass/features/2005/sep05/09-13NETLanguage.mspx * See http://commnet.microsoftpdc.com/content/downloads.aspx page, and search for the three "The .NET Language Integrated Query Framework" titles (five PowerPoint files) * Videos: http://www.xlinq.net/Learn/Videos/tabid/172/Default.aspx ---- Articles: * Article: "Comparing LINQ and Its Contemporaries", by Ted Neward -- http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndotnet/html/linqcomparisons.asp * PodCast on "LINQin with Barry Gervin" on ".NET Rocks!" - http://www.dotnetrocks.com/default.aspx?showID=166 * XML 2005 conference "XML Programming Refactored: Return of the Monoids" presentation by Erik Meijer and Brian Beckman -- http://www.idealliance.org/proceedings/xml05/abstracts/paper63.HTML ** slides: http://www.idealliance.org/proceedings/xml05/slides/meijer.pdf * "XQuery vs. XLINQ? Sorry, but that fight was over before it began." - http://www.sqljunkies.com/WebLog/ktegels/archive/2005/09/21/16855.aspx ---- On embedding XML in a host language: * http://www.dotnetslackers.com/XLinq/re-18933_XLinq_is_XML_embedded_in_a_host_language_a_good_idea_or_a_terrible_one.aspx * http://donxml.com/allthingstechie/archive/2006/02/03/2517.aspx ---- Note: this is not an ObjectRelationalMapping layer. It is just what it says: queries over various data sources specified in a notation that is integrated into the language (VB). ''Perhaps DLink is an ObjectRelationalMapping layer:'' DLinq enables mapping of classes to tables, like this: [Table(Name="People")] public class Person { [Column(DbType="nvarchar(32) not null", Id=true)] public string Name; [Column] public int Age; [Column] public bool CanCode; } DLinq specifically enables querying of relational tables using C#/VB.NET syntax, and classes. It also persists instance attribute changes back to the database, with SQL INSERT, UPDATE and DELETE commands. ''That does look more like an ORM tool, but I would hesitate to call it a "layer" because the domain model is polluted with details of the persistence mechanism -- they are both intertwingled instead of being separated into separate layers.'' * That assumes that the relational database is 'just a persistence mechanism'. If you read the paper "Comparing LINQ and Its Contemporaries", referenced above, you'll see that the authors consider this point of view to be discredited, and they are (correctly, in my opinion) trying to bring the relational model ''into'' the programming language as a directly-usable paradigm in its own right. Although there are things about DLinq that I don't like, in general it seems like a surprisingly elegant attempt at bringing the OO and relational approaches together. The inelegant part is the extent to which they had to modify C# to achieve this. This continues the usual trend of starting with a highly-praised, simple language (because 'everyone knows' that AllFeaturesShouldBeSimple) and then having to make it more 'complicated' by adding historically well-known language features (or hackish approximations thereof) in order to end up with something truly useful. -- DanMuller * Consider arithmetic operation - a bunch of syntactic hacks where a + b * c becomes add(a, mult(b, c)). If the language is statically-typed, then those functions will be overridden. Adding SQL-like syntax is no more inconsistent, as once again the SQL formatting resolves into a set of OOP objects and messages. The sad part is that this capability has been denied the developer - only the language can provide additional syntaxes and map them into OO syntax. The more I think about it, the more I appreciate the logic of LISP. Eventually, you will hit barriers to your language where it becomes inconvenient to express concepts in OOP (or list) syntax. At that point, you either (a) have the language designer provide a syntactic hack, or (b) include a macro-system so that the syntactic hack can be implemented by anyone. Any language without a truly versatile, expressive macro system will run into the problem. -- MartinZarate ---- I think that the approach of LINQ is not to be an ObjectRelationalMapper, but an ObjectRelationalMixer. ---- Finally, ideas pioneered by the likes of ExBase are starting to come back in style. Too bad it is munged into a big confusing pile of paradigm potpourri. (See bottom part of ExBaseRant for more my LINQ views, not the part that calls me an outdated stupid loser. Past that.) --top ---- MS LINQ has inspired a small open source library in Java: LanguageIntegratedQueryForJava ---- In .net, Linq seems to be a way of enforcing TightFieldCoupling. It works fine if you do not mind tight coupling for the members of a class. If you want to manage the coupling to gain the advantages of LooseCoupling of fields then Linq prevents this. Then Microsoft builds ASP.NET MVC on top of Linq, and you can not do InformationOrientedSoftwareDevelopment using MVC, and then most ASP.NET employers want MVC, ouch. -- JonGrover ---- See also: PerniciousIngrownSql (merit debate) ---- FebruaryZeroSix CategoryDotNet CategoryDataOrientation