{"id":1963,"date":"2015-12-17T00:21:33","date_gmt":"2015-12-17T00:21:32","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=1963"},"modified":"2025-06-13T21:02:08","modified_gmt":"2025-06-14T04:02:08","slug":"introducing-linq2couchbase-developer-preview-1-the-linq-provider-for-couchbase-n1ql","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/introducing-linq2couchbase-developer-preview-1-the-linq-provider-for-couchbase-n1ql\/","title":{"rendered":"Introducing Linq2Couchbase Developer Preview 1: The Linq provider for Couchbase N1QL!"},"content":{"rendered":"<address><strong>*Sample code for this post is available in the <a href=\"https:\/\/github.com\/couchbaselabs\/couchbase-net-examples\" target=\"_blank\" rel=\"noopener\">couchbase-net-examples<\/a> project <a href=\"https:\/\/github.com\/couchbaselabs\/couchbase-net-examples\/tree\/master\/Src\/Couchbase.Linq2CouchbaseExample\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/strong><\/address>\n<p>I am very excited to announce developer preview #1 of the official Linq provider for Couchbase N1QL! This is a very early pre-release to introduce the provider, preview it\u2019s basic functionality and illustrate how to use it. In this blog, I will create a sample application that goes over the steps on how to use the provider today.<\/p>\n<h2>Disclaimer<\/h2>\n<p>Being a pre-release expect the public API to change significantly until the beta becomes available. Note that the Couchbase.Linq project depends upon the GA release of the SDK. Do not use this provider in production until the GA of 2.2.0 SDK!<\/p>\n<h2>Getting the package<\/h2>\n<p>The package is a pre-release up on NuGet and can be found <a href=\"https:\/\/www.nuget.org\/packages\/Linq2Couchbase\/1.0.0-dp1\" target=\"_blank\" rel=\"noopener\">here<\/a>. If you are using Visual Studio, you\u2019ll probably want to either use the NuGet Package Manager or the NuGet Package Manager Console to include the dependencies in your project.<\/p>\n<p>First, create a console application using Visual Studio. Then using the Package Manager, search for Couchbase.Linq:<\/p>\n<p style=\"text-align: center;\"><img decoding=\"async\" src=\"\/wp-content\/original-assets\/2015\/august\/introducing-linq2couchbase-developer-preview-1-the-linq-provider-for-couchbase-n1ql\/linq-provider-nuget.jpg\" \/><\/p>\n<p>Make sure you select \u201cInclude Prerelease\u201d when you search, otherwise the package will not turn up in the search results. Click \u201cinstall\u201d and all of the dependencies will be installed for you. Finally close the Package Manager dialog.<\/p>\n<h2>Configuration and Initialization<\/h2>\n<p>The current Couchbase Linq provider has a hard dependency on the ClusterHelper class from the Couchbase .NET 2.1 SDK. The ClusterHelper is class that makes it easy to manage buckets and other resources that for performance reasons must be long-lived. It\u2019s a singleton for a Cluster object and a \u201cmultiton\u201d for Bucket references. This dependency will likely be removed in future versions, but must be considered when you use the Linq provider in your application.<\/p>\n<p>To handle this dependency, you simply have to use the ClusterHelper in your application and explicitly call Initialize() exactly once within your application\u2019s lifespan. By default localhost will be used to bootstrap the client, but you can use the overload that takes a ClientConfiguration that can be customized as you please.<\/p>\n<p><script src=\"https:\/\/gist.github.com\/jeffrymorris\/f2d3c147e32d4a554d96.js\"><\/script><\/p>\n<p>In the gist above, we create a new configuration and specify a Couchbase Server instance installed locally as the bootstrap target. Then we initialize the cluster helper object by calling Initialize and passing in the configuration.<\/p>\n<h2>Creating a DbContext instance<\/h2>\n<p>Once you have initialized the ClusterHelper, you\u2019ll create a DbContext object which is abstraction over the underlying data store (the Couchbase Bucket) and provides a means of building queries and (soon) grouping together changes which will be submitted back to the bucket.<\/p>\n<p><script src=\"https:\/\/gist.github.com\/jeffrymorris\/929cfb8aa5403aa29cc9.js\"><\/script><\/p>\n<p>The DbContext constructor takes a Cluster object and then name of the Couchbase bucket to use in the query.<\/p>\n<p>Note that once you create DbContext, it can be used over and over again and you can perform JOINs against itself as well. In a later post, i\u2019ll show how to inherit from DbContext to make concrete query objects that map to the documents within your bucket; eventually we will provide tool support to generate these objects automagically from a bucket.<\/p>\n<h2>Building a Linq query<\/h2>\n<p>Creating a Linq query is no different from using any other Linq provider for the most part; the differences are that Linq2Couchbase supports N1QL keywords and concepts like NEST, UNNEST and USE KEYS, amongst others.<\/p>\n<p><script src=\"https:\/\/gist.github.com\/jeffrymorris\/a8bd8ff9f1a8681a88d1.js\"><\/script><\/p>\n<p>Like all Linq queries, the execution is deferred until you enumerate on it:<\/p>\n<p><script src=\"https:\/\/gist.github.com\/jeffrymorris\/dad64ad4e1d12e13b9f4.js\"><\/script><\/p>\n<p>Here we are simply enumerating the query we created in the previous step. The provider will take the expression that has been generated and will convert it to a N1QL query and execute it returning only the rows portion of the response. Note that exceptions will be thrown by the Linq provider which is different behavior than the Couchbase SDK, which returns the exception as a property of the IQueryResult implementation.<\/p>\n<h2>What about that WHERE clause?<\/h2>\n<p>Did you notice that we are not specifying a WHERE clause to filter by document type? Since buckets are a keyspace of heterogeneous documents, without a predicate to filter the results the query generated would return every single Name attribute of every document within the bucket (note that beer-sample bucket has beer and brewery document types). Since we want to stay DRY and adding a WHERE type=\u201d[document-type]\u201d for every query would be tedious, there is a way to specify the document filter as an attribute to the POCO we are using for our projection.<\/p>\n<p><script src=\"https:\/\/gist.github.com\/jeffrymorris\/ce310c96d56ce1c6f8ab.js\"><\/script><\/p>\n<p>Here in the POCO definition, we have added a EntityTypeFilter and specified \u201cbeer\u201d as the document type we should be targeting with our query. Cool stuff!<\/p>\n<h2>Conclusion<\/h2>\n<p>Install the package and try it out. Let us know what you think and if you find any bugs or have a feature request, create a <a href=\"https:\/\/issues.couchbase.com\/browse\/linq\" target=\"_blank\" rel=\"noopener\">Jira ticket<\/a> or submit a <a href=\"https:\/\/github.com\/couchbaselabs\/Linq2Couchbase\" target=\"_blank\" rel=\"noopener\">pull request<\/a>!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>*Sample code for this post is available in the couchbase-net-examples project here. I am very excited to announce developer preview #1 of the official Linq provider for Couchbase N1QL! This is a very early pre-release to introduce the provider, preview [&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,1814,10127,1812,2201],"tags":[1468,1469],"ppma_author":[8970],"class_list":["post-1963","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","category-application-design","category-c-sharp","category-n1ql-query","category-tools-sdks","tag-linq","tag-linq2couchbase"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.7.1 (Yoast SEO v25.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Developer Preview 1 : The Linq provider for Couchbase N1QL!<\/title>\n<meta name=\"description\" content=\"Learn basic functionality of the Linq provider by checking out sample application that goes over the steps on how to use the provider today.\" \/>\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\/introducing-linq2couchbase-developer-preview-1-the-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=\"Introducing Linq2Couchbase Developer Preview 1: The Linq provider for Couchbase N1QL!\" \/>\n<meta property=\"og:description\" content=\"Learn basic functionality of the Linq provider by checking out sample application that goes over the steps on how to use the provider today.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/introducing-linq2couchbase-developer-preview-1-the-linq-provider-for-couchbase-n1ql\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2015-12-17T00:21:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T04:02:08+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=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/introducing-linq2couchbase-developer-preview-1-the-linq-provider-for-couchbase-n1ql\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/introducing-linq2couchbase-developer-preview-1-the-linq-provider-for-couchbase-n1ql\/\"},\"author\":{\"name\":\"Jeff Morris, Senior Software Engineer, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/b678bdd9f7b21a33d43ea965865a3341\"},\"headline\":\"Introducing Linq2Couchbase Developer Preview 1: The Linq provider for Couchbase N1QL!\",\"datePublished\":\"2015-12-17T00:21:32+00:00\",\"dateModified\":\"2025-06-14T04:02:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/introducing-linq2couchbase-developer-preview-1-the-linq-provider-for-couchbase-n1ql\/\"},\"wordCount\":806,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/introducing-linq2couchbase-developer-preview-1-the-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\",\"Application Design\",\"C#\",\"SQL++ \/ N1QL Query\",\"Tools &amp; SDKs\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/introducing-linq2couchbase-developer-preview-1-the-linq-provider-for-couchbase-n1ql\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/introducing-linq2couchbase-developer-preview-1-the-linq-provider-for-couchbase-n1ql\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/introducing-linq2couchbase-developer-preview-1-the-linq-provider-for-couchbase-n1ql\/\",\"name\":\"Developer Preview 1 : The Linq provider for Couchbase N1QL!\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/introducing-linq2couchbase-developer-preview-1-the-linq-provider-for-couchbase-n1ql\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/introducing-linq2couchbase-developer-preview-1-the-linq-provider-for-couchbase-n1ql\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2015-12-17T00:21:32+00:00\",\"dateModified\":\"2025-06-14T04:02:08+00:00\",\"description\":\"Learn basic functionality of the Linq provider by checking out sample application that goes over the steps on how to use the provider today.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/introducing-linq2couchbase-developer-preview-1-the-linq-provider-for-couchbase-n1ql\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/introducing-linq2couchbase-developer-preview-1-the-linq-provider-for-couchbase-n1ql\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/introducing-linq2couchbase-developer-preview-1-the-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\/introducing-linq2couchbase-developer-preview-1-the-linq-provider-for-couchbase-n1ql\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Introducing Linq2Couchbase Developer Preview 1: The 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":"Developer Preview 1 : The Linq provider for Couchbase N1QL!","description":"Learn basic functionality of the Linq provider by checking out sample application that goes over the steps on how to use the provider today.","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\/introducing-linq2couchbase-developer-preview-1-the-linq-provider-for-couchbase-n1ql\/","og_locale":"en_US","og_type":"article","og_title":"Introducing Linq2Couchbase Developer Preview 1: The Linq provider for Couchbase N1QL!","og_description":"Learn basic functionality of the Linq provider by checking out sample application that goes over the steps on how to use the provider today.","og_url":"https:\/\/www.couchbase.com\/blog\/introducing-linq2couchbase-developer-preview-1-the-linq-provider-for-couchbase-n1ql\/","og_site_name":"The Couchbase Blog","article_published_time":"2015-12-17T00:21:32+00:00","article_modified_time":"2025-06-14T04:02:08+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":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/introducing-linq2couchbase-developer-preview-1-the-linq-provider-for-couchbase-n1ql\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/introducing-linq2couchbase-developer-preview-1-the-linq-provider-for-couchbase-n1ql\/"},"author":{"name":"Jeff Morris, Senior Software Engineer, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/b678bdd9f7b21a33d43ea965865a3341"},"headline":"Introducing Linq2Couchbase Developer Preview 1: The Linq provider for Couchbase N1QL!","datePublished":"2015-12-17T00:21:32+00:00","dateModified":"2025-06-14T04:02:08+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/introducing-linq2couchbase-developer-preview-1-the-linq-provider-for-couchbase-n1ql\/"},"wordCount":806,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/introducing-linq2couchbase-developer-preview-1-the-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","Application Design","C#","SQL++ \/ N1QL Query","Tools &amp; SDKs"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/introducing-linq2couchbase-developer-preview-1-the-linq-provider-for-couchbase-n1ql\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/introducing-linq2couchbase-developer-preview-1-the-linq-provider-for-couchbase-n1ql\/","url":"https:\/\/www.couchbase.com\/blog\/introducing-linq2couchbase-developer-preview-1-the-linq-provider-for-couchbase-n1ql\/","name":"Developer Preview 1 : The Linq provider for Couchbase N1QL!","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/introducing-linq2couchbase-developer-preview-1-the-linq-provider-for-couchbase-n1ql\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/introducing-linq2couchbase-developer-preview-1-the-linq-provider-for-couchbase-n1ql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2015-12-17T00:21:32+00:00","dateModified":"2025-06-14T04:02:08+00:00","description":"Learn basic functionality of the Linq provider by checking out sample application that goes over the steps on how to use the provider today.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/introducing-linq2couchbase-developer-preview-1-the-linq-provider-for-couchbase-n1ql\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/introducing-linq2couchbase-developer-preview-1-the-linq-provider-for-couchbase-n1ql\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/introducing-linq2couchbase-developer-preview-1-the-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\/introducing-linq2couchbase-developer-preview-1-the-linq-provider-for-couchbase-n1ql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Introducing Linq2Couchbase Developer Preview 1: The 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\/1963","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=1963"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/1963\/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=1963"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=1963"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=1963"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=1963"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}