Apache Ignite SQL查询组成主键NET

时间:2017-04-04 15:03:54

标签: c# .net apache ignite

我想知道是否有可能以某种方式查询我用作主键的类的某个属性。 我的想法就像下面的代码。使用_key.NAME我收到并且错误消息说列不存在,我也尝试使用TestOjectPK.NAME,但没有成功:

var fieldsQuery = new SqlFieldsQuery("select _val,_key from TestObject where _key.NAME= ? and VALUE= ?", "name1","value");
IQueryCursor<IList> queryCursor = cache.QueryFields(fieldsQuery);

这是我的类,用于表示具有3列的特定表,其中2列是PK。

class TestObjectPK : IBinarizable
{
    private Int32 id;
    private String name;

    [QuerySqlField]
    public string NAME
    {
        get{return this.name;}
        set{this.name = value;}
    }

    [QuerySqlField]
    public Int32 ID
    {
        get{return this.id;}
        set{this.id = value;}
    }

    public void WriteBinary(IBinaryWriter writer)
    {
        writer.WriteInt("ID", ID);
        writer.WriteString("NAME", NAME);
    }

    public void ReadBinary(IBinaryReader reader)
    {
        ID = reader.ReadInt("ID");
        NAME = reader.ReadString("NAME");
    }

    public override int GetHashCode()
    {
        return id.GetHashCode() + name.GetHashCode();
    }

    public override bool Equals(object obj)
    {
        return id == ((TestObjectPK)obj).id && name == ((TestObjectPK)obj).NAME;
    }
}


class TestObject : IBinarizable
{
    private String value2;
    [QuerySqlField]
    public String VALUE
    {
        get { return this.value2; }
        set { this.value2 = value; }
    }


    public void WriteBinary(IBinaryWriter writer)
    {
        writer.WriteString("VALUE", VALUE);
    }

    public void ReadBinary(IBinaryReader reader)
    {
        VALUE = reader.ReadString("VALUE");
    }
    public override int GetHashCode()
    {
        return VALUE.GetHashCode();
    }

    public override bool Equals(object obj)
    {
        return VALUE == ((TestObject)obj).VALUE;
    }

}

提前谢谢。

1 个答案:

答案 0 :(得分:2)

来自键和值对象的[QuerySqlField]标记的所有字段都直接在SQL表中结束。

所以正确的查询将是

select _val,_key from TestObject where NAME=? and VALUE=?

还要确保为SQL配置键和值类型:

new CacheConfiguration("TestObject", 
        new QueryEntity(typeof(TestObjectPK), typeof(TestObject)))