{"id":2230,"date":"2016-04-21T16:12:26","date_gmt":"2016-04-21T16:12:25","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2230"},"modified":"2025-06-13T15:56:18","modified_gmt":"2025-06-13T22:56:18","slug":"released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/","title":{"rendered":"Released: Linq2Couchbase v1.1.0 the official Linq provider for Couchbase N1QL!"},"content":{"rendered":"<h2 id=\"released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql-\">Released: Linq2Couchbase v1.1.0 the official Linq provider for Couchbase N1QL!<\/h2>\n<p>Earlier this week we released v1.1.0 (specifically v1.1.0.2) of Linq2Couchbase, the official Linq Provider for Couchbase Server and <a href=\"https:\/\/www.couchbase.com\/products\/n1ql\/\">N1QL<\/a>! This release includes new and experimental features as well as bug fixes and many, many improvements over 1.0.X. In this post we will discuss and demo the new features where applicable!<\/p>\n<h2 id=\"contributors\">Contributors<\/h2>\n<p>Linq2Couchbase is a community-driven project, the <a href=\"https:\/\/github.com\/brantburnett\">number one<\/a> contributer (thanks <a href=\"https:\/\/github.com\/brantburnett\">Brant<\/a>!) is a community member! If you would like to contribute or send feedback, feel free to do so on the <a href=\"https:\/\/github.com\/couchbaselabs\/Linq2Couchbase\/issues\">github project<\/a> or the <a href=\"https:\/\/issues.couchbase.com\/projects\/LINQ\">Jira project.<\/a><\/p>\n<h2 id=\"major-features-and-or-commits\">Major features and\/or commits<\/h2>\n<p>More than 30 commits went into this release including the following features:<\/p>\n<ul>\n<li>Compatibility with custom serializers by extending IExtendedTypeSerializer<\/li>\n<li>Support for date functions such as DATE_DIFF, DATE_ADD, DATE_PART, and DATE_TRUNC<\/li>\n<li>Support for Contains operations on arrays<\/li>\n<li>Support for enumeration and GUID constants in queries<\/li>\n<li>Support for UNION statements<\/li>\n<li>Improved inline XML documentation<\/li>\n<li>Support for asynchronous LINQ queries using .ExecuteAsync<\/li>\n<li>Support for specifying query consistency level for RYOW<\/li>\n<li>Improved error handling<\/li>\n<li>Various bug fixes<\/li>\n<\/ul>\n<p>In the next couple of paragraphs I&#8217;ll discuss a few of the more important\/useful features.<\/p>\n<h3 id=\"change-tracking-and-proxying\">Change Tracking and Proxying<\/h3>\n<p>A new &#8220;experimental&#8221; feature we have added to 1.1.0 is support for change tracking via proxy objects. The use-case for this feature is assume that you would like modify or add several documents, but you want to the mutation to happen in batch a later time. For example, you want your BucketContext object to have the lifespan of a Web request in ASP.NET: when the request begins, you want the context to be created, within any action methods you wish to make modifications or add documents and finally, when the request ends you want to submit everything back to the server&#8230;or roll back if an error occurred.<\/p>\n<p>Change tracking is enabled by calling the <code>BucketContext.EnableChangeTracking()<\/code> method <strong><em>before<\/em><\/strong> initiating a query.<\/p>\n<pre><code>var db = new BucketContext(ClusterHelper.GetBucket(\"beer-sample\"));\r\ndb.BeginChangeTracking();\r\n\r\nvar query = from x in db.Query()\r\n            where x.Type == \"beer\"\r\n            select x;\r\n<\/code><\/pre>\n<p>Once it&#8217;s called the <code>BucketContext<\/code> will intercept each row of the result set and create a dynamic proxy that will bubble up any changes to properties or the properties of children documents back to the <code>BucketContext<\/code>.<\/p>\n<p>For example, assume we want to retrieve the first document from the list and modify the property <code>Abv<\/code>:<\/p>\n<pre><code>var beer = query.First();\r\nbeer.Abv = new decimal(12.6);\r\n<\/code><\/pre>\n<p>When the property <code>Abv<\/code> is set, it will trigger an event that will bubble all the way up to the <code>BucketContext<\/code> which will store a reference to the modified document. The actual update will not occur in Couchbase until later when <code>SubmitChanges<\/code> is called.<\/p>\n<p>What about adding a new document? In that case you would just create your document as normal and then call <code>Save<\/code> on the <code>BucketContext<\/code>:<\/p>\n<pre><code>var newBeer = new Beer\r\n{\r\n    Abv = 5,\r\n    Category = \"ale\",\r\n    Name = \"Some Brew\"\r\n};\r\n\r\ndb.Save(newBeer);\r\n<\/code><\/pre>\n<p>The call to <code>db.Save<\/code> is required so that the new document (which is not a proxy) can be <em>wrapped<\/em> within a proxy and tracked. Finally when we want to push the changes back to the server, we call <code>SubmitChanges<\/code>:<\/p>\n<pre><code>db.SubmitChanges();\r\n<\/code><\/pre>\n<p>Expect a much deeper example in a future post where we build an ASP.NET MVC application and show how the <code>BucketContext<\/code> can be used within an ASP.NEW Controller as a Unit of Work (UoW) scoped to the Web request.<\/p>\n<h3 id=\"custom-serializers-via-iextendedtypeserializer\">Custom serializers via IExtendedTypeSerializer<\/h3>\n<p>For some time, the Couchbase .NET SDK has supported custom serializers. The default serializer is based on NewtonSoft JSON.NET which is a full featured, well supported serializer, however in some cases you may want to use another serializer like <a href=\"https:\/\/www.couchbase.com\/blog\/using-jil-for-custom-json-serialization-in-the-couchbase-.net-sdk\/\">Jil<\/a> or <a href=\"https:\/\/github.com\/ServiceStack\/ServiceStack.Text\">ServiceStack<\/a>&#8216;s Text. To support other JSON serializers other than NewtonSoft in <a href=\"https:\/\/github.com\/couchbaselabs\/Linq2Couchbase\">Linq2Couchbase<\/a>, we have added a new interface called IExtendedTypeSerializer. Additionally, the serialization mechanism has been extended to include QueryRequest as an integration point, meaning a custom serializer can be used on a per request basis as opposed to uniformly across the entire Couchbase .NET SDK.<\/p>\n<h3 id=\"support-for-n1ql-date-functions\">Support for N1QL Date Functions<\/h3>\n<p>N1QL supports many Date functions which do not translate directly to .NET DateTime methods. In this release we have added support for a number of these <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.0\/n1ql\/n1ql-language-reference\/datefun.html\">N1QL date function<\/a>s including:<\/p>\n<ul>\n<li>DATE_DIFF_STR<\/li>\n<li>DATE_ADD_STR<\/li>\n<li>DATE_PART_STR<\/li>\n<li>DATE_TRUNC_STR<\/li>\n<\/ul>\n<p>Also, a new enumeration was added called N1QLDatePart for the date part parameter accepted by each function. You can read more about working with dates <a href=\"https:\/\/github.com\/couchbaselabs\/Linq2Couchbase\/blob\/master\/docs\/date-handling.md\">here<\/a>.<\/p>\n<h3 id=\"update-to-relinq-2-0-and-use-ilrepack\">Update to Relinq 2.0 and use ILRepack<\/h3>\n<p><a href=\"https:\/\/github.com\/re-motion\/Relinq\">Relinq<\/a>, the Open Source library that Linq2Couchbase (<a href=\"https:\/\/nhibernate.info\/\">NHibernate<\/a> and <a href=\"https:\/\/github.com\/aspnet\/EntityFramework\">Entity Framework 7<\/a> as well) recently released 2.0, so we updated to the latest. In order to make it easier to use Linq2Couchbase with EF 7 within the same project and reduce the number of required dependencies, the Relinq (and <a href=\"https:\/\/www.castleproject.org\/\">Castle.Core<\/a>) dependencies have been merged at build-time using <a href=\"https:\/\/github.com\/gluck\/il-repack\">ILRepack<\/a> on the NuGet package.<\/p>\n<h3 id=\"support-for-union-and-union-all-statements\">Support for <code>UNION<\/code> and <code>UNION ALL<\/code> Statements<\/h3>\n<p>To combine the results of two more queries into a single result set, N1QL has two special statements: <code>UNION<\/code> and <code>UNION ALL<\/code>.<\/p>\n<p>UNION returns the distinct results from each query and is now supported by Linq2Couchbase. For example, the following Linq query:<\/p>\n<pre><code> var query = db.Query(mockBucket.Object)\r\n                .Where(e =&gt; e.Type == \"beer\")\r\n                .Select(e =&gt; new { e.Name })\r\n                .Union(\r\n                     db.QueryBrewery&gt;(mockBucket.Object)\r\n                        .Where(e =&gt; e.Type == \"brewery\")\r\n                        .Select(e =&gt; new { e.Name }));\r\n<\/code><\/pre>\n<p>Will be generated into a N1QL query that looks something like this:<\/p>\n<pre><code>SELECT `Extent1`.`name` as `Name` FROM `default` as `Extent1` WHERE (`Extent1`.`type` = 'beer') \r\nUNION \r\nSELECT `Extent2`.`name` as `Name` FROM `default` as `Extent2` WHERE (`Extent2`.`type` = 'brewery');\r\n<\/code><\/pre>\n<p><code>UNION ALL<\/code> returns duplicates and the Linq syntax is slightly different in that we use the Concat method:<\/p>\n<pre><code>var query = db.Query(mockBucket.Object)\r\n                .Where(e =&gt; e.Type == \"beer\")\r\n                .Select(e =&gt; new { e.Name })\r\n                .Concat(\r\n                    db.Query(mockBucket.Object)\r\n                        .Where(e =&gt; e.Type == \"brewery\")\r\n                        .Select(e =&gt; new { e.Name }));\r\n<\/code><\/pre>\n<p>The N1QL query emitted will look like this:<\/p>\n<pre><code>SELECT `Extent1`.`name` as `Name` FROM `default` as `Extent1` WHERE (`Extent1`.`type` = 'beer'\r\nUNION ALL\r\nSELECT `Extent2`.`name` as `Name` FROM `default` as `Extent2` WHERE (`Extent2`.`type` = 'brewery'\r\n<\/code><\/pre>\n<p>Note that multiple <code>UNION<\/code>s can be applied as well!<\/p>\n<h3 id=\"asynchronous-linq-queries\">Asynchronous Linq Queries<\/h3>\n<p>Another cool feature that was added is support for asynchronous Linq queries using the <code>async<\/code> and <code>await<\/code> operators that are built into C#\/.NET. Note support for both IEnumerable and scalar (Sum, First(), Any()) are supported.<\/p>\n<p>Here is an example the returns an IEnumerable value:<\/p>\n<pre><code>var beers = from b in context.Query()\r\n            select b;\r\n\r\nvar results = (await beers.Take(1).ExecuteAsync()).ToList();\r\n<\/code><\/pre>\n<p>Here is another example demonstrating executing a scalar value:<\/p>\n<pre><code>var beers = from b in context.Query()\r\n            select b;\r\n\r\nvar result = await beers.ExecuteAsync(p =&gt; p.Average(q =&gt; q.Abv));\r\n<\/code><\/pre>\n<p>In either case, the query request will executed in a non-blocking manner (ala thread pool). Cool stuff.<\/p>\n<h2 id=\"how-to-get-it\">How to get it<\/h2>\n<p>You can get 1.1.0 Linq2Couchbase by either:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.nuget.org\/packages\/Linq2Couchbase\/1.1.0.2\">NuGet packages<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/couchbaselabs\/Linq2Couchbase\/tree\/1.1.0\">Pulling the source<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Released: Linq2Couchbase v1.1.0 the official Linq provider for Couchbase N1QL! Earlier this week we released v1.1.0 (specifically v1.1.0.2) of Linq2Couchbase, the official Linq Provider for Couchbase Server and N1QL! This release includes new and experimental features as well as bug [&hellip;]<\/p>\n","protected":false},"author":21,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1811],"tags":[1468,1469],"ppma_author":[8970],"class_list":["post-2230","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","tag-linq","tag-linq2couchbase"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.8 (Yoast SEO v25.8) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Released: Linq2Couchbase v1.1.0 the official Linq provider for Couchbase N1QL! - The Couchbase Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Released: Linq2Couchbase v1.1.0 the official Linq provider for Couchbase N1QL!\" \/>\n<meta property=\"og:description\" content=\"Released: Linq2Couchbase v1.1.0 the official Linq provider for Couchbase N1QL! Earlier this week we released v1.1.0 (specifically v1.1.0.2) of Linq2Couchbase, the official Linq Provider for Couchbase Server and N1QL! This release includes new and experimental features as well as bug [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-04-21T16:12:25+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-13T22:56:18+00:00\" \/>\n<meta name=\"author\" content=\"Jeff Morris, Senior Software Engineer, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@jeffrysmorris\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeff Morris, Senior Software Engineer, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/\"},\"author\":{\"name\":\"Jeff Morris, Senior Software Engineer, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/b678bdd9f7b21a33d43ea965865a3341\"},\"headline\":\"Released: Linq2Couchbase v1.1.0 the official Linq provider for Couchbase N1QL!\",\"datePublished\":\"2016-04-21T16:12:25+00:00\",\"dateModified\":\"2025-06-13T22:56:18+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/\"},\"wordCount\":958,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"Linq\",\"linq2couchbase\"],\"articleSection\":[\".NET\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/\",\"name\":\"Released: Linq2Couchbase v1.1.0 the official Linq provider for Couchbase N1QL! - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2016-04-21T16:12:25+00:00\",\"dateModified\":\"2025-06-13T22:56:18+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Released: Linq2Couchbase v1.1.0 the official Linq provider for Couchbase N1QL!\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/b678bdd9f7b21a33d43ea965865a3341\",\"name\":\"Jeff Morris, Senior Software Engineer, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/73188ee2831025d81740e12e1ed80812\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g\",\"caption\":\"Jeff Morris, Senior Software Engineer, Couchbase\"},\"description\":\"Jeff Morris is a Senior Software Engineer at Couchbase. Prior to joining Couchbase, Jeff spent six years at Source Interlink as an Enterprise Web Architect. Jeff is responsible for the development of Couchbase SDKs and how to integrate with N1QL (query language).\",\"sameAs\":[\"https:\/\/x.com\/jeffrysmorris\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/author\/jeff-morris\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Released: Linq2Couchbase v1.1.0 the official Linq provider for Couchbase N1QL! - The Couchbase Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/","og_locale":"en_US","og_type":"article","og_title":"Released: Linq2Couchbase v1.1.0 the official Linq provider for Couchbase N1QL!","og_description":"Released: Linq2Couchbase v1.1.0 the official Linq provider for Couchbase N1QL! Earlier this week we released v1.1.0 (specifically v1.1.0.2) of Linq2Couchbase, the official Linq Provider for Couchbase Server and N1QL! This release includes new and experimental features as well as bug [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/","og_site_name":"The Couchbase Blog","article_published_time":"2016-04-21T16:12:25+00:00","article_modified_time":"2025-06-13T22:56:18+00:00","author":"Jeff Morris, Senior Software Engineer, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@jeffrysmorris","twitter_misc":{"Written by":"Jeff Morris, Senior Software Engineer, Couchbase","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/"},"author":{"name":"Jeff Morris, Senior Software Engineer, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/b678bdd9f7b21a33d43ea965865a3341"},"headline":"Released: Linq2Couchbase v1.1.0 the official Linq provider for Couchbase N1QL!","datePublished":"2016-04-21T16:12:25+00:00","dateModified":"2025-06-13T22:56:18+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/"},"wordCount":958,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["Linq","linq2couchbase"],"articleSection":[".NET"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/","url":"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/","name":"Released: Linq2Couchbase v1.1.0 the official Linq provider for Couchbase N1QL! - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2016-04-21T16:12:25+00:00","dateModified":"2025-06-13T22:56:18+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Released: Linq2Couchbase v1.1.0 the official Linq provider for Couchbase N1QL!"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"The Couchbase Blog","description":"Couchbase, the NoSQL Database","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/b678bdd9f7b21a33d43ea965865a3341","name":"Jeff Morris, Senior Software Engineer, Couchbase","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/73188ee2831025d81740e12e1ed80812","url":"https:\/\/secure.gravatar.com\/avatar\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g","caption":"Jeff Morris, Senior Software Engineer, Couchbase"},"description":"Jeff Morris is a Senior Software Engineer at Couchbase. Prior to joining Couchbase, Jeff spent six years at Source Interlink as an Enterprise Web Architect. Jeff is responsible for the development of Couchbase SDKs and how to integrate with N1QL (query language).","sameAs":["https:\/\/x.com\/jeffrysmorris"],"url":"https:\/\/www.couchbase.com\/blog\/author\/jeff-morris\/"}]}},"authors":[{"term_id":8970,"user_id":21,"is_guest":0,"slug":"jeff-morris","display_name":"Jeff Morris, Senior Software Engineer, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g","author_category":"","last_name":"Jeff Morris, Senior Software Engineer, Couchbase","first_name":"Jeff","job_title":"","user_url":"","description":"Jeff Morris is a Senior Software Engineer at Couchbase. Prior to joining Couchbase, Jeff spent six years at Source Interlink as an Enterprise Web Architect. Jeff is responsible for the development of Couchbase SDKs and how to integrate with N1QL (query language)."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/2230","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/users\/21"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=2230"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/2230\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=2230"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=2230"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=2230"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=2230"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}