您好我的数据库查询有问题。虽然我的标题与其他一些问题类似,但我已经在这里查看了问题并且没有发现任何相似之处。我正在处理的站点可以创建收集请求,然后在表中查看它们以管理现有请求。我使用的第一个查询工作并返回正确的请求。原始查询可以在下面看到。
var query = context.LogisticsRequests.AsQueryable().Where(x => x.Type == types.Collection.ToString());
添加了一个删除请求的新选项,但这只是数据库中名为isDeleted的新列,这样就可以从表中删除请求,但仍有一个存档副本。因此,为了过滤掉已删除的请求,我更新了查询,如下所示。
var query = context.LogisticsRequests.AsQueryable().Where(x => x.Type == types.Collection.ToString() && x.isDeleted != true);
更改查询后,没有返回任何结果,并且我无法理解为什么,只有一个请求被设置为删除,而其他大多数请求都将具有空值,因此它们仍应返回,因为它们不等于true。我已经在下面列出了一些截图,显示了查询结果和发送到数据库的查询。感谢您提供任何帮助或建议。
发送到db的查询:
{SELECT [t0].[LogisticsRequestId], [t0].[CreatedOn], [t0].[ModifiedOn], [t0].[CreatedById], [t0].[ModifiedById], [t0].[Type], [t0].[ClientId], [t0].[SupplierReference], [t0].[DateRequested], [t0].[CourierType], [t0].[ClientName], [t0].[Laboratory], [t0].[LaboratoryId], [t0].[Reference], [t0].[SpecialInstructions], [t0].[ContactName], [t0].[ContactNo], [t0].[ContactEmail], [t0].[CollectionAddress], [t0].[UserLogisticsAddressId], [t0].[ClientLogisticsAddressId], [t0].[SiteName], [t0].[CollectionInstructions], [t0].[RequestDetails], [t0].[EstimatedDeliveryDate], [t0].[Status], [t0].[Comment], [t0].[NumberCoolBoxes], [t0].[CollectionFrom], [t0].[CollectionTo], [t0].[CallBefore], [t0].[PleaseCall], [t0].[isDeleted]
FROM [dbo].[LogisticsRequest] AS [t0]
WHERE ([t0].[Type] = @p0) AND (NOT ([t0].[isDeleted] = 1))
}
再次感谢您的帮助。
答案 0 :(得分:1)
确保在IsDelete
列中必须有值。对于所有记录,它必须是true
或false
。确保您没有在null
列中存储IsDelete
。如果它为空,则您必须设置true
或false
。
将您的查询更改为
var query = context.LogisticsRequests.AsQueryable().Where(x => x.Type == types.Collection.ToString() && !(x.isDeleted == null ? false : x.IsDeleted));
答案 1 :(得分:0)
您应该检查新列"是否已删除"填充所有行。如果新创建了列,则可能包含null
,因此SQL查询将失败。使用true
和false
填充表格。
另外,正如评论中所提到的,你应该使用"!isDeleted"。
答案 2 :(得分:0)
对此感到好奇
Where(x => x.Type == types.Collection.ToString()
是类型集合的类型?然后它应该读
types.Collection.Contains(x.Type)
喜欢这样
Where(x => types.Collection.Contains(x.Type) && !x.isDeleted)