【发布时间】:2019-12-23 10:40:31
【问题描述】:
我正在寻找一种通过 EF 查询测试 db 字段的方法,只是为了查看它是否为空,但无需读取全部数据。如果它不为空,它将非常大并且有很多行,因此以标准方式执行此操作(如下面的 sn-p 所示)是对数据库的一项非常繁重的操作并且需要很长时间。我想要的是让用户知道哪些行在该字段中有一些数据,然后他们可以选择查看它,然后对该行执行单个操作以仅返回该数据。
我觉得这应该是可能的,测试看某物是否有价值不需要读取所有数据,那么有没有办法达到预期的结果?
Class MyClassModel
Property HasData As Boolean?
Function Query (DB as DBContext) As IEnumerable(Of MyClassLineModel)
Dim data As IQueryable(Of MyClass) = DB.MyClasses
If HasData.HasValue Then data = From t In data Where t.Data IsNot Nothing = HasData
Dim ret = (From t In data Select New MyClassLineModel With {
.HasData = t.Data IsNot Nothing}).ToArray
Return ret
End Function
End Class
Class MyClassLineModel
Property HasData As Boolean?
End Class
附言这是一个 MVC 项目,因此是“模型”等。但是这个问题仍然普遍适用。
编辑
NVM,原来是 EF 为我做的。上述代码转换为 db 查询
CASE WHEN Data IS NULL THEN 0 ELSE 1 END
它不会读取整个字段。响应时间很好。 Mods 可以删除 Q,或将其保留给任何想知道的人。感谢所有的答案家伙。
【问题讨论】:
-
1.在要搜索的列上创建索引; 2. 使用过滤器仅检索非空行,并可能添加
Take以返回合理的数量(可以显示给用户)。从数据库的角度来看,您的问题实际上没有意义。你不能测试“一个领域”。您可以结合一些行(元组)测试一个字段,也可以测试每一行。
标签: sql database vb.net entity-framework model-view-controller