• Webinars
  • Docs
  • Download
  • Blogs
  • Contact Us
Try Free
Show / Hide Table of Contents

LINQ Basic Query Operators Usage

Note

This feature is only available in NCache Enterprise Edition.

NCache supports multiple basic query operators with LINQ. This section covers the usage of basic query operators in NCache with LINQ.

Prerequisites

  • Install the following NuGet package in your application:
    • Enterprise: Linq.NCache
  • Include the following namespaces in your application:
    • AlalchiSoft.NCache.Client
    • Alachisoft.NCache.Linq
    • Alachisoft.NCache.Runtime.Exceptions
  • Indexing for searchable objects and their attributes need to be configured first as explained in Configuring Query Indexes in Administrator's Guide.
  • Cache must be running.
  • The application must be connected to cache before performing the operation.
  • Make sure that the data being added is serializable.
  • To ensure the operation is fail safe, it is recommended to handle any potential exceptions within your application, as explained in Handling Failures.
  • To handle any unseen exceptions, refer to the Troubleshooting section.

LINQ Basic Operators

The following code uses the NCacheQuery class with two of the basic query operators '>' and '=='. It is assumed the cache contains Product objects.

Basic Query Operator '>':

A Product class LINQ object is created which is used to query products which have ProductID > 1001.

Using Simple LINQ Query Expression:

try
{
    // Precondition: Cache is already connected 

    // Create custom class LINQ object 
    IQueryable<Product> products = new NCacheQuery<Product>(cache);

    // LINQ query to search cache
    var result = from prod in products
                 where prod.ProductID > 1001
                 select prod;              

    if (result != null)
    {
        foreach (Product product in result)
        {
            // Perform operations
        }
    }
    else
    {
        // No result in the cache related to query
    }
}
catch (OperationFailedException ex)
{
    //NCache specific exception
    // Exception can occur due to:
    // Connection Failures
    // Operation Timeout
    // Operation performed during state transfer
}
catch (Exception ex)
{
    // Any generic exception like ArgumentNullException or ArgumentException
}

Using Lambda Expression:

try
{
    // Precondition: Cache is already connected 

    // Create custom class LINQ object 
    IQueryable<Product> products = new NCacheQuery<Product>(cache);

    // Lambda expression for same query
    var result = products.Select(prod => prod).Where(prod => prod.ProductID > 1001);

    if (result != null)
    {
        foreach (Product product in result)
        {
            // Perform operations
        }
    }
    else
    {
        // No result in the cache related to query
    }
}
catch (OperationFailedException ex)
{
    //NCache specific exception
    // Exception can occur due to:
    // Connection Failures
    // Operation Timeout
    // Operation performed during state transfer
}
catch (Exception ex)
{
    // Any generic exception like ArgumentNullException or ArgumentException
}

Basic Query Operator '==':

A Product class LINQ object is created which is used to query product which has a ProductID = 1001.

Using Simple LINQ Query Expression:

try
{
    // Precondition: Cache is already connected 

    // Create custom class LINQ object 
    IQueryable<Product> products = new NCacheQuery<Product>(cache);

    // LINQ query to search cache
    var result = from prod in products
                 where prod.ProductID == 1001
                 select prod;

    if (result != null)
    {
        foreach (Product product in result)
        {
            // Perform operations
        }
    }
    else
    {
        // No result in the cache related to query
    }
}
catch (OperationFailedException ex)
{
    //NCache specific exception
    // Exception can occur due to:
    // Connection Failures
    // Operation Timeout
    // Operation performed during state transfer
}
catch (Exception ex)
{
    // Any generic exception like ArgumentNullException or ArgumentException
}

Using Lambda Expression:

try
{
    // Precondition: Cache is already connected 

    // Create custom class LINQ object 
    IQueryable<Product> products = new NCacheQuery<Product>(cache);

    // Lambda expression for same query
    var result = products.Select(prod => prod).Where(prod => prod.ProductID == 1001);

    if (result != null)
        {
        foreach (Product product in result)
            {
                // Perform operations
            }
        }
    else
        {
            // No result in the cache related to query
        }
}
catch (OperationFailedException ex)
{
    //NCache specific exception
    // Exception can occur due to:
    // Connection Failures
    // Operation Timeout
    // Operation performed during state transfer
}
catch (Exception ex)
{
    // Any generic exception like ArgumentNullException or ArgumentException
}

Additional Resources

NCache provides sample application for using LINQ with NCache on GitHub.

See Also

Use LINQ Query to Search for Objects
LINQ Logical Operators Usage
LINQ Aggregate Operators Usage
LINQ Wildcard Operators Usage

Back to top Copyright © 2017 Alachisoft