2012-11-12 155 views
0

我想将Guid转换为相同的UUID或字符串版本,以便下面的CQL查询可以工作。将Guid转换为Cassandra UUID

     if (cassandraDb.ExecuteQuery(string.Format("SELECT OrderGroupId FROM Order WHERE OrderGroupId={0}", orderGroupId)).Count() <= 0)       { 

变量'orderGroupId'是一个Guid。很明显,这是在C#/ .NET环境中使用FluentCandandra。任何提示?

谢谢。

+0

或者我将如何改变这个查询所以不是执行CQL语句,而是使用FluentCassandra为Cassandra数据库中的UUID值执行等效的“测试”? –

+0

为了确保我能理解,您已经拥有UUID数据(FluentCassandra.Types.UUIDType或FluentCassandra.Types.TimeUUIDType),并且您想将其与其他内容进行比较? – Oren

回答

0

要将System.Guid转换为FluentCassandra.Types.UUIDType,您只需将一个转换为另一个。

同样适用于FluentCassandra.Types.TimeUUIDType。

+0

但对于此查询,它需要显式转换为可插入字符串CQL查询中的表单。 –

+0

对不起,但我不太了解评论。你想知道如何将一个GUID值作为字符串插入到CQL SELECT查询中吗? – Oren

0

通过使用.ToString()属性直接以字符串形式执行CQL查询。

string.Format("SELECT OrderGroupId FROM Order WHERE OrderGroupId={0}", orderGroupId.ToString()) 

应该可以正常工作。如果不...你可能想试试这个(我在评论跟帖中发现C#的客户之一):

protected static string ToCqlString(Guid guid) { 
     var bytes = guid.ToByteArray(); 
     StringBuilder sb = new StringBuilder(bytes.Length * 2); 
     for (int i = 0; i < 16; i++) { 
      if (i == 4 || i == 6 || i == 8 || i == 10) { 
       sb.Append("-"); 
      } 
      var b = bytes[i]; 
      sb.AppendFormat("{0:x2}", b); 

     } 
     return sb.ToString(); 
    } 

干杯, 佳佳