You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@ignite.apache.org by Murthy Kakarlamudi <ks...@gmail.com> on 2016/09/22 03:15:07 UTC

Ignite LINQ Help

Hi all,
     I created a sample example based on the LINQExample provided in Ignite
Examples. However I am not getting expected results. Any help is much
appreciated. In my for loop at  the end I am expecting the last 10 entries.
But nothing is getting displayed. Any help is much appreciated.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Apache.Ignite.Core;
using Apache.Ignite.Linq;
using Apache.Ignite.Core.Cache;
using Apache.Ignite.Core.Cache.Configuration;
using Apache.Ignite.Core.Cache.Query;

using MyIgnite;

namespace MyIgniteConsole
{
    class Program
    {
        /// <summary>
        ///
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            using (var ignite = Ignition.Start())
            {
                Console.WriteLine();
                var cache = ignite.GetOrCreateCache<int, MyModel>(new
CacheConfiguration
                {
                    Name = "myCache",
                    QueryEntities = new[]
                    {
                        new QueryEntity(typeof(int), typeof(MyModel))

                    }
                });

                for (int i = 0; i < 100; i++)
                {
                    cache.Put(i, new MyModel(i, "Test"));
                }

                Console.WriteLine("Cache size: "+cache.Get(10).MyKey);

                IQueryable<ICacheEntry<int, MyModel>> qry =
                cache.AsCacheQueryable().Where(obj => obj.Value.MyKey > 90);

                Console.WriteLine();
                Console.WriteLine(">>> Objects with Key greater than 90 " );

                foreach (ICacheEntry<int, MyModel> entry in qry)
                    Console.WriteLine(">>>    " + entry.Value);

                Console.WriteLine();
            }



            Console.ReadLine();
        }
    }
}


*MyModel Class:*
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Apache.Ignite.Core.Cache.Configuration;

namespace MyIgniteConsole
{
    [Serializable]
    class MyModel
    {

        public MyModel(int MyKeyIn, String MyStringIn)
        {
            MyKey = MyKeyIn;
            MyString = MyStringIn;
        }

        [QuerySqlField]
        public int MyKey { get; set; }

        public String MyString { get; set; }
    }
}

Re: Ignite LINQ Help

Posted by Murthy Kakarlamudi <ks...@gmail.com>.
That worked. Thanks Pavel.

On Thu, Sep 22, 2016 at 2:57 AM, Pavel Tupitsyn <pt...@apache.org>
wrote:

> Hi,
>
> Your class is serialized with .NET BinaryFormatter, that's why SQL and
> LINQ does not work [1].
>
> To fix this, remove [Serializable] attribute and register the class in
> BinaryConfiguration:
>
>
>   var cfg = new IgniteConfiguration { BinaryConfiguration = new
> BinaryConfiguration(typeof(MyModel) };
>   using (var ignite = Ignition.Start(cfg))
>   ...
>
>
> [1] https://apacheignite-net.readme.io/docs/serialization
>
> On Thu, Sep 22, 2016 at 6:15 AM, Murthy Kakarlamudi <ks...@gmail.com>
> wrote:
>
>> Hi all,
>>      I created a sample example based on the LINQExample provided in
>> Ignite Examples. However I am not getting expected results. Any help is
>> much appreciated. In my for loop at  the end I am expecting the last 10
>> entries. But nothing is getting displayed. Any help is much appreciated.
>>
>> using System;
>> using System.Collections.Generic;
>> using System.Linq;
>> using System.Text;
>> using System.Threading.Tasks;
>> using Apache.Ignite.Core;
>> using Apache.Ignite.Linq;
>> using Apache.Ignite.Core.Cache;
>> using Apache.Ignite.Core.Cache.Configuration;
>> using Apache.Ignite.Core.Cache.Query;
>>
>> using MyIgnite;
>>
>> namespace MyIgniteConsole
>> {
>>     class Program
>>     {
>>         /// <summary>
>>         ///
>>         /// </summary>
>>         /// <param name="args"></param>
>>         static void Main(string[] args)
>>         {
>>             using (var ignite = Ignition.Start())
>>             {
>>                 Console.WriteLine();
>>                 var cache = ignite.GetOrCreateCache<int, MyModel>(new
>> CacheConfiguration
>>                 {
>>                     Name = "myCache",
>>                     QueryEntities = new[]
>>                     {
>>                         new QueryEntity(typeof(int), typeof(MyModel))
>>
>>                     }
>>                 });
>>
>>                 for (int i = 0; i < 100; i++)
>>                 {
>>                     cache.Put(i, new MyModel(i, "Test"));
>>                 }
>>
>>                 Console.WriteLine("Cache size: "+cache.Get(10).MyKey);
>>
>>                 IQueryable<ICacheEntry<int, MyModel>> qry =
>>                 cache.AsCacheQueryable().Where(obj => obj.Value.MyKey >
>> 90);
>>
>>                 Console.WriteLine();
>>                 Console.WriteLine(">>> Objects with Key greater than 90 "
>> );
>>
>>                 foreach (ICacheEntry<int, MyModel> entry in qry)
>>                     Console.WriteLine(">>>    " + entry.Value);
>>
>>                 Console.WriteLine();
>>             }
>>
>>
>>
>>             Console.ReadLine();
>>         }
>>     }
>> }
>>
>>
>> *MyModel Class:*
>> using System;
>> using System.Collections.Generic;
>> using System.Linq;
>> using System.Text;
>> using System.Threading.Tasks;
>> using Apache.Ignite.Core.Cache.Configuration;
>>
>> namespace MyIgniteConsole
>> {
>>     [Serializable]
>>     class MyModel
>>     {
>>
>>         public MyModel(int MyKeyIn, String MyStringIn)
>>         {
>>             MyKey = MyKeyIn;
>>             MyString = MyStringIn;
>>         }
>>
>>         [QuerySqlField]
>>         public int MyKey { get; set; }
>>
>>         public String MyString { get; set; }
>>     }
>> }
>>
>>
>

Re: Ignite LINQ Help

Posted by Pavel Tupitsyn <pt...@apache.org>.
Hi,

Your class is serialized with .NET BinaryFormatter, that's why SQL and LINQ
does not work [1].

To fix this, remove [Serializable] attribute and register the class in
BinaryConfiguration:


  var cfg = new IgniteConfiguration { BinaryConfiguration = new
BinaryConfiguration(typeof(MyModel) };
  using (var ignite = Ignition.Start(cfg))
  ...


[1] https://apacheignite-net.readme.io/docs/serialization

On Thu, Sep 22, 2016 at 6:15 AM, Murthy Kakarlamudi <ks...@gmail.com>
wrote:

> Hi all,
>      I created a sample example based on the LINQExample provided in
> Ignite Examples. However I am not getting expected results. Any help is
> much appreciated. In my for loop at  the end I am expecting the last 10
> entries. But nothing is getting displayed. Any help is much appreciated.
>
> using System;
> using System.Collections.Generic;
> using System.Linq;
> using System.Text;
> using System.Threading.Tasks;
> using Apache.Ignite.Core;
> using Apache.Ignite.Linq;
> using Apache.Ignite.Core.Cache;
> using Apache.Ignite.Core.Cache.Configuration;
> using Apache.Ignite.Core.Cache.Query;
>
> using MyIgnite;
>
> namespace MyIgniteConsole
> {
>     class Program
>     {
>         /// <summary>
>         ///
>         /// </summary>
>         /// <param name="args"></param>
>         static void Main(string[] args)
>         {
>             using (var ignite = Ignition.Start())
>             {
>                 Console.WriteLine();
>                 var cache = ignite.GetOrCreateCache<int, MyModel>(new
> CacheConfiguration
>                 {
>                     Name = "myCache",
>                     QueryEntities = new[]
>                     {
>                         new QueryEntity(typeof(int), typeof(MyModel))
>
>                     }
>                 });
>
>                 for (int i = 0; i < 100; i++)
>                 {
>                     cache.Put(i, new MyModel(i, "Test"));
>                 }
>
>                 Console.WriteLine("Cache size: "+cache.Get(10).MyKey);
>
>                 IQueryable<ICacheEntry<int, MyModel>> qry =
>                 cache.AsCacheQueryable().Where(obj => obj.Value.MyKey >
> 90);
>
>                 Console.WriteLine();
>                 Console.WriteLine(">>> Objects with Key greater than 90 "
> );
>
>                 foreach (ICacheEntry<int, MyModel> entry in qry)
>                     Console.WriteLine(">>>    " + entry.Value);
>
>                 Console.WriteLine();
>             }
>
>
>
>             Console.ReadLine();
>         }
>     }
> }
>
>
> *MyModel Class:*
> using System;
> using System.Collections.Generic;
> using System.Linq;
> using System.Text;
> using System.Threading.Tasks;
> using Apache.Ignite.Core.Cache.Configuration;
>
> namespace MyIgniteConsole
> {
>     [Serializable]
>     class MyModel
>     {
>
>         public MyModel(int MyKeyIn, String MyStringIn)
>         {
>             MyKey = MyKeyIn;
>             MyString = MyStringIn;
>         }
>
>         [QuerySqlField]
>         public int MyKey { get; set; }
>
>         public String MyString { get; set; }
>     }
> }
>
>