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; }
> }
> }
>
>