查询空值蔚蓝的表存储
-
26-09-2019 - |
题
有谁知道查询空值Azure Table中存储的正确方法。从我读过的东西,这是可能的(虽然有防止其发展存储错误)。不过,我不断收到以下错误,当我在现场云存储这样做的:
一的请求输入是无效的。
这是一个简单化的LINQ查询,我已经放在一起的版本。
var query = from fooBar in fooBarSVC.CreateQuery<FooBar>("FooBars")
where fooBar.PartitionKey == kPartitionID
&& fooBar.Code == kfooBarCode
&& fooBar.Effective_Date <= kFooBarDate.ToUniversalTime()
&& (fooBar.Termination_Date > kFooBarDate.ToUniversalTime() || fooBar.Termination_Date == null)
select fooBar;
如果我运行查询,不检查空,它工作正常。我认识的一个可能的解决办法是在其上运行集合的第二个查询,此查询带回。我不介意做,如果我需要,但想知道如果我能先得到这种方法工作。
任何人看到任何明显我做错了吗?
解决方案
的问题是,因为天青表存储不具有一个模式,空塔实际上不存在。这就是为什么你的查询是无效的。还有如表存储空列没有这样的事情。你可以做类似的商店一个空字符串,如果你真的不得不这样做。真的不过根本问题这里要说的是Azure的表存储还真不是建比分区键和行键以外的任何栏目进行查询。您在这些非标一列的查询每次你做一个表扫描。如果你开始得到很多,你将有查询超时非常高速率数据。我建议设置为这些类型的查询手动索引。例如,你可以存储在同一个表,但是与该行关键的不同值相同的数据。最后,如果您的应用程序都没有得到疯狂的高使用率我只想用SQL Azure的,因为这将是该类型的你正在做的查询更加灵活。
更新:天蓝色的对表存储的设计,我会建议阅读的一个很好的指南。 http://azure.microsoft.com/en-我们/文档/物品/存储表设计导/
其他提示
我只是有这个问题,并发现了一个可爱的小忍者帽子戏法实际测试空值。虽然我直接使用Azure存储接口,我90%肯定它会为LINQ工作太多,如果你做的一样。
下面是我所做的检查,如果价格(的Int32?)为空:
not (Price lt 0 or Price gt 0)
我猜你的情况,你可以通过测试做LINQ相同的,如果fooBar.Termination_Date比DateTime.UtcNow小于或大于例如。是这样的:
where fooBar.PartitionKey == kPartitionID
&& fooBar.Code == kfooBarCode
&& fooBar.Effective_Date <= kFooBarDate.ToUniversalTime()
&& (fooBar.Termination_Date > kFooBarDate.ToUniversalTime()
|| (not (fooBar.Termination_Date < DateTime.UtcNow
or fooBar.Termination_Date > DateTime.UtcNow))
select fooBar;