<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Richard Andersen</title>
    <description>The latest articles on Forem by Richard Andersen (@randersenyb).</description>
    <link>https://forem.com/randersenyb</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1060926%2F452a654a-92bc-4b2d-a888-2bc0b8562636.jpeg</url>
      <title>Forem: Richard Andersen</title>
      <link>https://forem.com/randersenyb</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/randersenyb"/>
    <language>en</language>
    <item>
      <title>Unlock Aerospike Cloud: Exploring the power of the Aerospike LINQPad driver</title>
      <dc:creator>Richard Andersen</dc:creator>
      <pubDate>Wed, 28 Feb 2024 02:05:46 +0000</pubDate>
      <link>https://forem.com/aerospike/unlock-aerospike-cloud-exploring-the-power-of-the-aerospike-linqpad-driver-2b2d</link>
      <guid>https://forem.com/aerospike/unlock-aerospike-cloud-exploring-the-power-of-the-aerospike-linqpad-driver-2b2d</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdeveloper-hub.s3.us-west-1.amazonaws.com%2Frichard-andersen%2Funlock-aerospike-cloud-exploring-power-of-linqpad-driver-1_1709081514432.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdeveloper-hub.s3.us-west-1.amazonaws.com%2Frichard-andersen%2Funlock-aerospike-cloud-exploring-power-of-linqpad-driver-1_1709081514432.webp"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This blog is part of a continuing series showing how to use the Aerospike LINQPad driver. For other blogs in this series, please see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aerospike.com/developer/blog/aerospike-for-linqpad" rel="noopener noreferrer"&gt;Aerospike for LINQPad&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aerospike.com/developer/blog/how-to-use-auto-values-in-nosql-linqpad-driver" rel="noopener noreferrer"&gt;How to use auto-values in the Aerospike LINQPad driver&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Aerospike LINQPad driver is now able to connect to the Aerospike Cloud, providing all the power of &lt;a href="https://www.linqpad.net/nugetsamples.aspx" rel="noopener noreferrer"&gt;LINQPad&lt;/a&gt; combined with the &lt;a href="https://github.com/aerospike-community/aerospike-linqpad-driver/tree/main/linqpad-samples" rel="noopener noreferrer"&gt;Aerospike LINQPad driver&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This includes a graphical interface, &lt;a href="https://learn.microsoft.com/en-us/dotnet/csharp/linq/" rel="noopener noreferrer"&gt;LINQ&lt;/a&gt; support, and enhanced driver features to support the Aerospike Database. Find more information about LINQPad &lt;a href="https://www.linqpad.net/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Let’s look at the new connection dialog and some of the features of the LINQPad driver.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connection dialog
&lt;/h2&gt;

&lt;p&gt;The new connection dialog will now have two tabs. The first tab will be for native, “self-managed”, Aerospike clusters, and the second tab is used to connect to &lt;a href="https://aerospike.com/docs/cloud" rel="noopener noreferrer"&gt;Aerospike Cloud&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Below shows the connection properties:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdeveloper-hub.s3.us-west-1.amazonaws.com%2Frichard-andersen%2Funlock-aerospike-cloud-exploring-the-power-of-the-aerospike-linqpad-driver-connection-dialog_1709081474856.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdeveloper-hub.s3.us-west-1.amazonaws.com%2Frichard-andersen%2Funlock-aerospike-cloud-exploring-the-power-of-the-aerospike-linqpad-driver-connection-dialog_1709081474856.png"&gt;&lt;/a&gt;&lt;/p&gt;
Aerospike Cloud connection dialog



&lt;p&gt;A review of each property is below:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The host name is provided in the cloud dashboard. The hyperlink will take you to the Aerospike login screen or,  if you are already logged in, to the dashboard.&lt;/li&gt;
&lt;li&gt;The cloud client connection port.&lt;/li&gt;
&lt;li&gt;If a VPC (AWS private link) is defined, this would be the host name displayed on the cloud dashboard. The host name field would be the VPC endpoint.&lt;/li&gt;
&lt;li&gt;The API key is created via the dashboard.&lt;/li&gt;
&lt;li&gt;If the API key and secret were exported from the dashboard to your local machine, this button will allow you to import that API Key CSV file. Properties “API Key” (item 4) and “API Secret” (item 7) are not required.&lt;/li&gt;
&lt;li&gt;If enabled, the built-in LINQPad password manager is used. When enabled, a dropdown will be displayed to select the Password Name you defined in the manager. The Password Manager can be found on the File menu of LINQPad.&lt;/li&gt;
&lt;li&gt;The associated API Key’s secret.&lt;/li&gt;
&lt;li&gt;If checked, it will show the API secret in plain text.&lt;/li&gt;
&lt;li&gt;The associated cloud namespace.&lt;/li&gt;
&lt;li&gt;If provided, a list of set names separated by a comma or space. The set names will be used to populate the sets under the namespace in the LINQPad connection tree (see below image). Also, set and bin “detection” will be performed to obtain the bins and data types. Regardless of whether this field is provided, you can always obtain this information from the “Null Set.” See the “Using Null Set” section below.&lt;/li&gt;
&lt;li&gt;Hyperlinks to additional topics.&lt;/li&gt;
&lt;li&gt;The timeout values that will be used when obtaining the connection or performing an operation. Note that the “Sleep” field is ignored for cloud connections.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Below shows the relationship between the “set names” connection property and the LINQPad connection tree:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdeveloper-hub.s3.us-west-1.amazonaws.com%2Frichard-andersen%2Funlock-aerospike-cloud-exploring-the-power-of-the-aerospike-linqpad-driver-connection-tree-set-names_1709081474940.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdeveloper-hub.s3.us-west-1.amazonaws.com%2Frichard-andersen%2Funlock-aerospike-cloud-exploring-the-power-of-the-aerospike-linqpad-driver-connection-tree-set-names_1709081474940.png"&gt;&lt;/a&gt;&lt;/p&gt;
Association between the “Set Names” property and the sets populated in the connection tree



&lt;h2&gt;
  
  
  Driver overview
&lt;/h2&gt;

&lt;p&gt;All the features of the Aerospike LINQPad driver are available, including the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Graphical interface with all LINQPad features&lt;/li&gt;
&lt;li&gt;Drag-and-drop of set names&lt;/li&gt;
&lt;li&gt;LINQ&lt;/li&gt;
&lt;li&gt;Serialize and deserialize any C# object via the Object-Mapper (POCO)&lt;/li&gt;
&lt;li&gt;Auto-Values, which provide dynamic data type conversion from Aerospike types to .Net types without testing or casting&lt;/li&gt;
&lt;li&gt;JSON support&lt;/li&gt;
&lt;li&gt;Explore the Aerospike API directly or use the driver’s enhanced API&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdeveloper-hub.s3.us-west-1.amazonaws.com%2Frichard-andersen%2Funlock-aerospike-cloud-exploring-the-power-of-the-aerospike-linqpad-driver-2_1709081474438.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdeveloper-hub.s3.us-west-1.amazonaws.com%2Frichard-andersen%2Funlock-aerospike-cloud-exploring-the-power-of-the-aerospike-linqpad-driver-2_1709081474438.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdeveloper-hub.s3.us-west-1.amazonaws.com%2Frichard-andersen%2Funlock-aerospike-cloud-exploring-the-power-of-the-aerospike-linqpad-driver-1_1709081473558.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdeveloper-hub.s3.us-west-1.amazonaws.com%2Frichard-andersen%2Funlock-aerospike-cloud-exploring-the-power-of-the-aerospike-linqpad-driver-1_1709081473558.gif"&gt;&lt;/a&gt;&lt;/p&gt;
Demonstrates some of the capabilities of LINQPad and the LINQPad driver



&lt;h2&gt;
  
  
  Using the Aerospike null set
&lt;/h2&gt;

&lt;p&gt;If the “Set Names” connection property is not provided, the set and bin names will not be provided in the LINQPad connection tree (see image above).&lt;br&gt;
You can still perform queries and API calls using the driver’s API features. Below is an example of a driver API call to obtain the records for Aerospike set “Artist”:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aerospike_cloud.NullSet.Where(ns =&amp;gt; ns.Aerospike.SetName == "Artist")&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Below is the output:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdeveloper-hub.s3.us-west-1.amazonaws.com%2Frichard-andersen%2Funlock-aerospike-cloud-exploring-the-power-of-the-aerospike-linqpad-driver-extended-api_1709081475084.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdeveloper-hub.s3.us-west-1.amazonaws.com%2Frichard-andersen%2Funlock-aerospike-cloud-exploring-the-power-of-the-aerospike-linqpad-driver-extended-api_1709081475084.png"&gt;&lt;/a&gt;&lt;/p&gt;
Result using the driver’s extended API for set “Artist”



&lt;p&gt;You can always extend the “where” clause or interact with the result set.&lt;/p&gt;

&lt;h2&gt;
  
  
  Samples
&lt;/h2&gt;

&lt;p&gt;You can find samples for Aerospike LINQPad Cloud under the &lt;a href="https://github.com/aerospike-community/aerospike-linqpad-driver/tree/main/linqpad-samples/Cloud" rel="noopener noreferrer"&gt;samples folder&lt;/a&gt; or under the “Samples” tab in LINQPad.&lt;/p&gt;

&lt;h2&gt;
  
  
  Review
&lt;/h2&gt;

&lt;p&gt;In this installment of the Aerospike LINQPad driver blog series, we learned how to use LINQPad to connect to Aerospike Cloud. This connection makes exploring your data in the cloud just as easy as other deployment options. Stay tuned for more articles in this series highlighting additional features of the driver.&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>linqpad</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Using auto-values in Aerospike LINQPad driver</title>
      <dc:creator>Richard Andersen</dc:creator>
      <pubDate>Thu, 08 Feb 2024 20:03:53 +0000</pubDate>
      <link>https://forem.com/aerospike/using-auto-values-in-aerospike-linqpad-driver-143h</link>
      <guid>https://forem.com/aerospike/using-auto-values-in-aerospike-linqpad-driver-143h</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdeveloper-hub.s3.us-west-1.amazonaws.com%2Frichard-andersen%2Fusing-auto-values-in-aerospike-linqpad-driver-blog_1707410347927.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdeveloper-hub.s3.us-west-1.amazonaws.com%2Frichard-andersen%2Fusing-auto-values-in-aerospike-linqpad-driver-blog_1707410347927.webp"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When working with NoSQL databases like Aerospike, which are designed for unstructured data storage, adopting strongly typed languages like C# may introduce programming complexities. These can stem from verifying the presence of "bins" (akin to columns) within a record and bin data types that can change between records.&lt;/p&gt;

&lt;p&gt;Auto-Values (&lt;code&gt;AValue&lt;/code&gt; is the class) simplify the need to check, cast, or convert values between Aerospike data types and .NET data types. They provide a rich set of operations and seamlessly work with any type of data, including collections and JSON. They provide protection against null reference exceptions, invalid cast exceptions, conversion exceptions, etc.&lt;br&gt;
To explore the &lt;a href="https://www.linqpad.net" rel="noopener noreferrer"&gt;LINQPad&lt;/a&gt; or the &lt;a href="https://aerospike.com/developer/blog/aerospike-for-linqpad" rel="noopener noreferrer"&gt;Aerospike LINQPad driver&lt;/a&gt; in more detail, kindly click on the respective links provided.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example set
&lt;/h2&gt;

&lt;p&gt;The following illustrates an Aerospike set where different records have a varied number of bins, and bins in the record set can have varying data types (e.g., bin &lt;code&gt;BinA&lt;/code&gt; can be a &lt;code&gt;double&lt;/code&gt;, &lt;code&gt;long&lt;/code&gt;, &lt;code&gt;string&lt;/code&gt;, or &lt;code&gt;list&lt;/code&gt; in different records).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdeveloper-hub.s3.us-west-1.amazonaws.com%2Frichard-andersen%2FUsing%2520Auto-Values%2520in%2520Aerospike%2520LINQPad%2520Driver-demo-types-display_1707410345724.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdeveloper-hub.s3.us-west-1.amazonaws.com%2Frichard-andersen%2FUsing%2520Auto-Values%2520in%2520Aerospike%2520LINQPad%2520Driver-demo-types-display_1707410345724.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Display of the &lt;code&gt;DemoTypes&lt;/code&gt; set&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Note that the LINQPad connection tree (left side) is expanded, illustrating the bins for the set &lt;code&gt;DemoTypes&lt;/code&gt;. Under the set name, each bin is listed, displaying its associated data type. Take note of the symbols after the data type. A &lt;code&gt;*&lt;/code&gt; indicates this bin has different data types between records. A &lt;code&gt;?&lt;/code&gt; indicates this bin wasn’t present in some of the records within this set. These symbols provide a quick view of the set and expected values. &lt;br&gt;
In the &lt;strong&gt;Results&lt;/strong&gt; pane (bottom-right), bins with &lt;code&gt;null&lt;/code&gt; are not present in that record.&lt;/p&gt;

&lt;h2&gt;
  
  
  Simple cast examples
&lt;/h2&gt;

&lt;p&gt;Below are examples that illustrate the difference between using Aerospike data types, C# data types, and Auto-Values.&lt;br&gt;
Let’s begin with an example where  Auto-Values are &lt;strong&gt;not&lt;/strong&gt; used:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdeveloper-hub.s3.us-west-1.amazonaws.com%2Frichard-andersen%2FUsing%2520Auto-Values%2520in%2520Aerospike%2520LINQPad%2520Driver-data-type-casting_1707410345018.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdeveloper-hub.s3.us-west-1.amazonaws.com%2Frichard-andersen%2FUsing%2520Auto-Values%2520in%2520Aerospike%2520LINQPad%2520Driver-data-type-casting_1707410345018.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Shows that casting to the proper data type is required&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Notice that there are no results from the query, even though it should have matched one record. The reason it failed is because “456” is an &lt;code&gt;Int32&lt;/code&gt;, and the DB numeric values are &lt;code&gt;Int64&lt;/code&gt;. So, “456” needs to be cast to &lt;code&gt;Int64&lt;/code&gt; (long). Also, we need to check to make sure the bin is present in all records; otherwise, a null exception is thrown. &lt;/p&gt;

&lt;p&gt;Below is an example showing these changes:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdeveloper-hub.s3.us-west-1.amazonaws.com%2Frichard-andersen%2FUsing%2520Auto-Values%2520%2520LINQPad%2520Driver-updated-query-using-required-cast_1707410344508.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdeveloper-hub.s3.us-west-1.amazonaws.com%2Frichard-andersen%2FUsing%2520Auto-Values%2520%2520LINQPad%2520Driver-updated-query-using-required-cast_1707410344508.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Updated query using required cast&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Let’s look at the same query using Auto-Values:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdeveloper-hub.s3.us-west-1.amazonaws.com%2Frichard-andersen%2FUsing%2520Auto-Values%2520in%2520Aerospike%2520LINQPad%2520Driver-no-required-testing-or-casting_1707410346940.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdeveloper-hub.s3.us-west-1.amazonaws.com%2Frichard-andersen%2FUsing%2520Auto-Values%2520in%2520Aerospike%2520LINQPad%2520Driver-no-required-testing-or-casting_1707410346940.png"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;Using Auto-Values doesn’t require testing or casting&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In the given example, you do not have to verify the existence of the bin or explicitly cast "456" to a long data type.&lt;br&gt;
Auto-Values take care of not only casting but also converting. Conversion between any of the .NET primitive types to or from any Aerospike data types is seamless. It also handles nullable values, JSON objects, and &lt;a href="https://aerospike.com/developer/tutorials/cdt" rel="noopener noreferrer"&gt;collection data types (CDT)&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Auto-Values support all standard operations like &lt;code&gt;==&lt;/code&gt;, &lt;code&gt;&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;&lt;/code&gt;, etc. They also support all the equality and comparison operations.&lt;/p&gt;

&lt;p&gt;Below are some additional examples:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdeveloper-hub.s3.us-west-1.amazonaws.com%2Frichard-andersen%2FUsing%2520Auto-Values%2520in%2520Aerospike%2520LINQPad%2520Driver-updated-query-using-required-cast-queries-with-different-auto-value-uses_1707410347730.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdeveloper-hub.s3.us-west-1.amazonaws.com%2Frichard-andersen%2FUsing%2520Auto-Values%2520in%2520Aerospike%2520LINQPad%2520Driver-updated-query-using-required-cast-queries-with-different-auto-value-uses_1707410347730.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdeveloper-hub.s3.us-west-1.amazonaws.com%2Frichard-andersen%2FUsing%2520Auto-Values%2520in%2520Aerospike%2520LINQPad%2520Driver-different-auto-value-uses_1707410346197.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdeveloper-hub.s3.us-west-1.amazonaws.com%2Frichard-andersen%2FUsing%2520Auto-Values%2520in%2520Aerospike%2520LINQPad%2520Driver-different-auto-value-uses_1707410346197.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Queries above show different uses of Auto-Values&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Handling unsupported data types
&lt;/h2&gt;

&lt;p&gt;Aerospike supports a limited set of &lt;a href="https://aerospike.com/docs/server/guide/data-types/scalar-data-types" rel="noopener noreferrer"&gt;data types&lt;/a&gt;. They include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;String&lt;/li&gt;
&lt;li&gt;Integer (Int64)&lt;/li&gt;
&lt;li&gt;Double&lt;/li&gt;
&lt;li&gt;Boolean&lt;/li&gt;
&lt;li&gt;Blob/Bytes (byte[])&lt;/li&gt;
&lt;li&gt;List&lt;/li&gt;
&lt;li&gt;Map (Directory)&lt;/li&gt;
&lt;li&gt;Geospatial (&lt;a href="https://github.com/GeoJSON-Net/GeoJSON.Net" rel="noopener noreferrer"&gt;GeoJSON.NET&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The driver has extended support by allowing the following .NET data types:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;DateTime&lt;/code&gt;, &lt;code&gt;DateTimeOffset&lt;/code&gt;, &lt;code&gt;TimeSpan&lt;/code&gt;: These values are mapped to either an Aerospike string or long data types depending on the connection or API configuration. Auto-Values will automatically take care of these conversions to or from the database.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;JSON&lt;/code&gt;: These values are mapped to an Aerospike &lt;a href="https://aerospike.com/docs/server/guide/data-types/cdt-map" rel="noopener noreferrer"&gt;&lt;code&gt;Map&lt;/code&gt; data type&lt;/a&gt; where the JSON property name is the key in the Map, and the JSON value is the Map value. JSON arrays are mapped to Aerospike “List.” Nested JSON structures are completely supported, and the driver takes care of all conversions to or from the database.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Below are examples where  .NET DateTimeOffset, DateTime, and TimeSpan instances are used to obtain matching records. The values stored in the Aerospike database are either strings or an Int64 value (number of nanoseconds from Unix Epoch). The driver will manage the conversion between these different types.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdeveloper-hub.s3.us-west-1.amazonaws.com%2Frichard-andersen%2FUsing%2520Auto-Values%2520in%2520Aerospike%2520LINQPad%2520Driver-datetime-datetimeoffset-timespan_1707410345257.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdeveloper-hub.s3.us-west-1.amazonaws.com%2Frichard-andersen%2FUsing%2520Auto-Values%2520in%2520Aerospike%2520LINQPad%2520Driver-datetime-datetimeoffset-timespan_1707410345257.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Queries using .NET DateTime, DateTimeOffset, and Timespan&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;By the way, you can control how values are converted and displayed through the properties located in the "Display/Conversion Options" section of the connection dialog.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conversion
&lt;/h2&gt;

&lt;p&gt;Auto-Values provide a rich set of conversion functions, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Convert&amp;lt;T&amp;gt;&lt;/code&gt; - Will try to convert to the provided .NET data type. If it cannot, an invalid cast exception is thrown.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Is{data type}&lt;/code&gt; – Use to test if the underlying .NET data type is that {date type}. Examples of these functions are: IsList, IsCDT, IsJSON, IsInt16, IsNumeric, IsString, etc.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;To{data type}&lt;/code&gt; – Will try to convert to the .NET {data type}, if possible. Note {data type} can be Dictionary, List, .NET native type, etc. Examples of these functions are: ToList, ToBoolean, ToByte, etc.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;TryGetValue&amp;lt;T&amp;gt;&lt;/code&gt; – This will try to match a provided value and convert the value into the provided .NET data type. If not successful, the default value of that data type and/or false is returned, depending on usage. This function can be applied against CDTs or non-CDT values.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;TryGetValue&lt;/code&gt; – This will try to match the provided value. If successful, the matched value is returned as an Auto-Value. If not, an empty Auto-Value, false, or null can be returned depending on usage. This function can be applied against CDTs or non-CDT values.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;AsEnumerable&lt;/code&gt; – This will convert an Auto-Value into an enumerable object if it is a database CDT. If not a CDT, an empty enumeration is returned. All elements in the CDT are scanned and converted into Auto-Values. This will provide the highest level of protection against invalid casts or null value reference exceptions. This also allows for using the advanced Auto-Value functions outlined in the Collection Data Types section.&lt;/li&gt;
&lt;li&gt;Implicit Casting – Auto-Values know how to implicitly cast from an Aerospike data type to any .NET primary type without explicitly providing the type.
Detailed documentation can be found through  IntelliSense or by reviewing the function’s respective documentation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Collection data types
&lt;/h2&gt;

&lt;p&gt;Auto-Values can seamlessly be used to find elements within CDTs. These functions are based on standard C# methods. Examples of these operations are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Contains&lt;/code&gt; – Returns true if the matching value is contained in a bin’s value or an element within a CDT. The matching options determine how the matches occur.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;FindAll&lt;/code&gt; – Returns a collection of matching Auto-Values. A match can occur as a bin’s value or an element within a CDT. The matching options determine how the matches occur. If no matches are found, an empty enumerable is returned.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;TryGetValue&lt;/code&gt; – Returns the first matching value (as an Auto-Value) contained in a bin’s value or an element within a CDT. If the Auto-Value is not found, an Empty Auto-Value is returned.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;OfType&amp;lt;T&amp;gt;&lt;/code&gt; - Tries to cast the Auto-Value to the provided .NET type, creating a new collection of those types. If a value cannot be cast, it will be ignored.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Cast&amp;lt;T&amp;gt;&lt;/code&gt; -- Will cast the Auto-Value to the provided .NET type. If it cannot be cast, an invalid cast exception will occur.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Convert&amp;lt;T&amp;gt;&lt;/code&gt; - Will try to convert the Auto-Value, resulting in a collection of converted .NET values. If an Auto-Value cannot be converted, it will be ignored.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Below are some examples using “Contains” and “FindAll” methods:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdeveloper-hub.s3.us-west-1.amazonaws.com%2Frichard-andersen%2FUsing%2520Auto-Values%2520in%2520Aerospike%2520LINQPad%2520Driver-queries-using-contains-and-findall-methods-_1707410347068.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdeveloper-hub.s3.us-west-1.amazonaws.com%2Frichard-andersen%2FUsing%2520Auto-Values%2520in%2520Aerospike%2520LINQPad%2520Driver-queries-using-contains-and-findall-methods-_1707410347068.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Queries using the Contains and FindAll methods&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You can find additional examples in the &lt;a href="https://github.com/aerospike-community/aerospike-linqpad-driver/tree/main/linqpad-samples/Cloud" rel="noopener noreferrer"&gt;LINQPad sample folder&lt;/a&gt;.&lt;br&gt;
Below is an example of “drilling” into several different sub-collections using LINQ. This example finds all invoices for a certain song track, resulting in a collection of customers. This example is located in the &lt;a href="https://github.com/aerospike-community/aerospike-linqpad-driver/blob/main/linqpad-samples/Native/CDT-Json-Docs.linq" rel="noopener noreferrer"&gt;CDT-Json-Docs&lt;/a&gt; sample LINQPad script.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdeveloper-hub.s3.us-west-1.amazonaws.com%2Frichard-andersen%2FUsing%2520Auto-Values%2520in%2520Aerospike%2520LINQPad%2520Driver-linq-query_1707410346440.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdeveloper-hub.s3.us-west-1.amazonaws.com%2Frichard-andersen%2FUsing%2520Auto-Values%2520in%2520Aerospike%2520LINQPad%2520Driver-linq-query_1707410346440.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;LINQ Query&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Primary key
&lt;/h2&gt;

&lt;p&gt;Auto-Values also extend to primary keys. They have the same features as found in the Bin Auto-Values. There are a few additional features, such as digest values.&lt;br&gt;
If the primary key value is not saved (only the digest is used), matching to a value can still occur using Auto-Values.&lt;br&gt;
Below is an example where the digest is only available; note that the actual value must be used.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdeveloper-hub.s3.us-west-1.amazonaws.com%2Frichard-andersen%2FUsing%2520Auto-Values%2520in%2520Aerospike%2520LINQPad%2520Driver-string-value-database-ingest_1707410347582.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdeveloper-hub.s3.us-west-1.amazonaws.com%2Frichard-andersen%2FUsing%2520Auto-Values%2520in%2520Aerospike%2520LINQPad%2520Driver-string-value-database-ingest_1707410347582.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Query using a string value by means of the database digest&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  LINQPad driver samples
&lt;/h2&gt;

&lt;p&gt;You can find samples for the &lt;a href="https://github.com/aerospike-community/aerospike-linqpad-driver" rel="noopener noreferrer"&gt;Aerospike LINQPad driver&lt;/a&gt; in the &lt;a href="https://github.com/aerospike-community/aerospike-linqpad-driver/tree/main/linqpad-samples/Cloud" rel="noopener noreferrer"&gt;samples folder&lt;/a&gt; or under the “Samples” tab in &lt;a href="https://www.linqpad.net/nugetsamples.aspx" rel="noopener noreferrer"&gt;LINQPad&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>linq</category>
      <category>csharp</category>
    </item>
    <item>
      <title>Aerospike for LINQPad</title>
      <dc:creator>Richard Andersen</dc:creator>
      <pubDate>Thu, 20 Apr 2023 17:35:06 +0000</pubDate>
      <link>https://forem.com/aerospike/aerospike-for-linqpad-4h3c</link>
      <guid>https://forem.com/aerospike/aerospike-for-linqpad-4h3c</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--k9lLYTBA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://developer-hub.s3.us-west-1.amazonaws.com/78458717/aerospikeLinqpad_1681249300211.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k9lLYTBA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://developer-hub.s3.us-west-1.amazonaws.com/78458717/aerospikeLinqpad_1681249300211.png" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This blog explores the new Aerospike driver for LINQPad and its available features. Aerospike for LINQPad 7 is a data context dynamic driver for interactively querying and updating an &lt;a href="https://aerospike.com/"&gt;Aerospike &lt;/a&gt; database using "&lt;a href="https://www.linqpad.net/"&gt;LINQPad&lt;/a&gt;". LINQPad is a Graphical Development Tool designed for rapid prototyping, data modeling, data mining, drag-and-drop execution, interactive debugging/testing, quickly learn new frameworks/APIs (e.g., &lt;a href="https://developer.aerospike.com/client/csharp"&gt;Aerospike API&lt;/a&gt; ), etc. The Aerospike driver for LINQPad is designed to support all LINQPad features.&lt;/p&gt;

&lt;p&gt;Here is a subset of what you can perform using the driver:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Query any &lt;a href="https://docs.aerospike.com/server/architecture/data-model"&gt;Aerospike Set&lt;/a&gt; or &lt;a href="https://docs.aerospike.com/server/architecture/secondary-index"&gt;Secondary Index&lt;/a&gt; using any &lt;a href="https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/linq/"&gt;LINQ &lt;/a&gt; command (including joins), interactively.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use the driver’s extension methods to perform operations like &lt;a href="https://docs.aerospike.com/server/guide/expressions"&gt;Aerospike Expression&lt;/a&gt; , CRUD operations, etc. without understanding the underlying Aerospike API.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Serialize and deserialize any C# object via the Object-Mapper (POCO). The driver supports all C# data types, nested classes, and collections.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Full JSON support using &lt;a href="https://www.newtonsoft.com/json"&gt;Json.NET&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Execute &lt;a href="https://docs.aerospike.com/server/guide/udf"&gt;UDF&lt;/a&gt;s directly and display their underlying code. UDFs are treated like C# methods with intellisense and code completion.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Export or import sets directly or with an &lt;a href="https://docs.aerospike.com/server/operations/configure/cross-datacenter/filters"&gt;Aerospike Filter&lt;/a&gt; .&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Provides metadata about the cluster, including active/inactive nodes, Aerospike server version, etc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use the &lt;a href="https://developer.aerospike.com/client/csharp"&gt;Aerospike API&lt;/a&gt; directly to perform advance operations or instantly test snippets used in your application code.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The driver can, also, dynamically detect the structure of records within an Aerospike Set resulting in an easy-to-understand view much like a relational table with enhanced capabilities. Some of these capabilities are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;detection of &lt;a href="https://docs.aerospike.com/server/architecture/data-model"&gt;Bins&lt;/a&gt; with the same name but have different data types between records within a Set&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;records with different Bin structures within a Set&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;implicit data type conversion without the need to cast or check a Bin's data type for quick data operations&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;enhanced &lt;a href="https://docs.aerospike.com/server/guide/data-types/cdt"&gt;Aerospike CDT&lt;/a&gt; handling&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;driver extension methods to programmatically interrogate Namespaces, Sets, records, Bins, Bin data types, etc.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The screenshot below show how Aerospike Sets and Bins are represented in LinqPad:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nAbTs0Zu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://developer-hub.s3.us-west-1.amazonaws.com/1196964679/DupBinTypeInRecordDialog_1680555132209.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nAbTs0Zu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://developer-hub.s3.us-west-1.amazonaws.com/1196964679/DupBinTypeInRecordDialog_1680555132209.png" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Aerospike Namespaces, Sets, Bins, etc. Representation in LINQPad&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The LINQPad connection pane displays the different Aerospike components in an hierarchical manner where namespace is under Aerospike cluster connection. Aerospike sets are under namespaces, and bins are under sets. Below screenshot shows the relationship between these components:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rXB2rm4R--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://developer-hub.s3.us-west-1.amazonaws.com/1196964679/ClusterNamespaceSetBinsDialog_1680555260863.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rXB2rm4R--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://developer-hub.s3.us-west-1.amazonaws.com/1196964679/ClusterNamespaceSetBinsDialog_1680555260863.png" width="422" height="531"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can drag-and-drop each component onto the LINQPad Query pane to be executed by LINQPad. The execution behavior depends on the component. For example, a set or secondary index will present the records within that component. For other components, the properties are displayed. In all cases, you can always execute the driver’s extension methods. These extension methods, greatly simplify Aerospike API commands like &lt;code&gt;get&lt;/code&gt;, &lt;code&gt;put&lt;/code&gt;, &lt;code&gt;query&lt;/code&gt;, &lt;code&gt;operate&lt;/code&gt;, etc.  You can also import or export data. Of course, you can always use LINQ against Aerospike sets or secondary indexes. An example of some of the driver extensions follows:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jJjAvU8Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://developer-hub.s3.us-west-1.amazonaws.com/1196964679/NamespaceShowMethods_1680555316745.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jJjAvU8Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://developer-hub.s3.us-west-1.amazonaws.com/1196964679/NamespaceShowMethods_1680555316745.png" width="709" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;IntelliSense Showing Some of the Extension Methods and Properties on a Set Object&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;For detailed information about the Aerospike LINQPad driver, see the &lt;a href="https://github.com/aerospike-community/aerospike-linqpad-driver"&gt;ReadMe file in GitHub&lt;/a&gt; .&lt;/p&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;p&gt;You can install the Aerospike Driver directly from the &lt;a href="https://www.linqpad.net/CodeSnippetIDE.aspx"&gt;LINQPad NuGet Manager&lt;/a&gt; or from the &lt;a href="https://github.com/aerospike-community/aerospike-linqpad-driver"&gt;GitHub Repo&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  LINQPad NuGet Manager
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Open LINQPad.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click Add Connection Link.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select  &lt;strong&gt;View more drivers…&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Show all drivers&lt;/strong&gt;, and then type &lt;strong&gt;Aerospike&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;Install&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Manual (GitHub)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Obtain the latest driver (.LPX6 file) from the &lt;a href="https://github.com/aerospike-community/aerospike-linqpad-driver/tree/main/Driver"&gt;Driver folder&lt;/a&gt; in GitHub and download it to your computer.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open LINQPad.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;Add Connection Link&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;View more drivers…&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;Install driver from .LPX6 file…&lt;/strong&gt; and select downloaded lpx6 file.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>linqpad</category>
      <category>aerospike</category>
      <category>linq</category>
      <category>dotnet</category>
    </item>
  </channel>
</rss>
