Click here to Skip to main content
12,502,009 members (50,180 online)
Click here to Skip to main content
Add your own
alternative version

Stats

54.9K views
172 downloads
27 bookmarked
Posted

Karmencita: an object query language for .NET

, 23 Mar 2006
Rate this:
Please Sign up or sign in to vote.
Learn more about Karmencita, an object query language for .NET.

Introduction

Karmencita is an object query language for .NET. Its purpose is to allow easy querying from in-memory structured data.

Features:

  • an easy, SQL-like language.
  • common, slim API used for querying data.
  • supports any IEnumerable data source, DataTables and XmlDataDocuments.
  • extensible implementation.
  • common API, but still gets results depending on the data source. (For instance, when querying XmlDataDocuments, we get back a XmlElement[]. But if we query a DataTable, we get back a DataRow[]).
  • supports IComparable for custom type implementation.

The basic idea is to have an easy SQL-like language in which we can write queries against any data source.

Using the code

Let's see some code samples:

  • query the list of running processes:
    // get an array of running processes
    Process[] proc = Process.GetProceses();
    
    // initialize Karmencita with
    // the type of object to be queries
    ObjectQuery<Process> oq = 
            new ObjectQuery<Process>();
    
    // write the query
    string query = "BasePriority > 3 and Responding" + 
                   " = true and MainWindowTitle Like C%";
    
    //run the query
    Process[] processes = (Process[]) oq.Select(proc, query);
  • query a Stack<> of Customer objects:
    // initialize the data source
    // (in this case a Stack of Customers)
    Stack<Customer> proc = .....
    
    // initialize Karmencita with
    // the type of object to be queries
    ObjectQuery<Customer> oq = 
              new ObjectQuery<Customer>();
    
    // write the query
    string query = "Name = [Thor the Mighty]" + 
                   " and IsMale = true and BirthDate" + 
                   " < [1,1,1910]";
    
    //run the query
    Customer[] processes = (Customer[]) oq.Select(proc, query);
  • query a DataTable:
    // load the DataTable from the database
    DataTable dt = .....
    
    // initialize Karmencita with
    // the type of object to be queries
    ObjectQuery<DataTable> oq = 
             new ObjectQuery<DataTable>();
    
    // write the query
    string query = "ProductName = Fish and" + 
                   " UnitPrice > 200 and IsInStock = true";
    
    //run the query
    DataRow[] processes = (DataRow[]) oq.Select(proc, query);
  • query an XMLDataDocument:
    // load the XML document
    DataTable dt = .....
    
    // initialize Karmencita with the type
    // of object to be queries
    ObjectQuery<XMLDataDocument> oq = 
        new ObjectQuery<XMLDataDocument>();
    
    // write the query
    string query = "ProductName = Fish and" + 
                   " UnitPrice > 200 and IsInStock = true";
    
    //run the query
    XmlElement[] processes = (XmlElement[]) oq.Select(proc, query);

Conclusion

As you can see, Karmencita is a generic query engine which can be used to query multiple data sources. Just throw a data source and a query to it, and have the result. No need to muck around with multiple query syntaxes (DataTable .Select, XQuery etc.). One generic query language to rule them all. :)

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

Share

About the Author

Marius Gheorghe
United States United States
No Biography provided

You may also be interested in...

Pro
Pro

Comments and Discussions

 
GeneralNeed Full Example Pin
peperkraf13-Jul-09 18:16
memberpeperkraf13-Jul-09 18:16 
GeneralNPath Pin
Roger J6-Jul-06 19:57
memberRoger J6-Jul-06 19:57 
GeneralI actualy tried to use this and ... Pin
Pop Catalin24-Mar-06 5:57
memberPop Catalin24-Mar-06 5:57 
GeneralRe: I actualy tried to use this and ... Pin
dzCepheus24-Mar-06 11:15
memberdzCepheus24-Mar-06 11:15 
GeneralRe: I actualy tried to use this and ... Pin
dzCepheus24-Mar-06 11:18
memberdzCepheus24-Mar-06 11:18 
GeneralRe: I actualy tried to use this and ... Pin
Adrian_Moore28-Mar-06 2:43
memberAdrian_Moore28-Mar-06 2:43 
GeneralRe: I actualy tried to use this and ... Pin
Pop Catalin28-Mar-06 4:54
memberPop Catalin28-Mar-06 4:54 
GeneralStrong Typed Alternative Pin
Pop Catalin24-Mar-06 2:56
memberPop Catalin24-Mar-06 2:56 
GeneralRe: Strong Typed Alternative Pin
[sharp]24-Mar-06 3:42
member[sharp]24-Mar-06 3:42 
GeneralRe: Strong Typed Alternative Pin
Pop Catalin24-Mar-06 4:33
memberPop Catalin24-Mar-06 4:33 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.160919.1 | Last Updated 23 Mar 2006
Article Copyright 2006 by Marius Gheorghe
Everything else Copyright © CodeProject, 1999-2016
Layout: fixed | fluid