Linq to sql 查询未返回正确的项目

Linq to sql query not returning correct items

您好,我在查询我的数据库时遇到问题。尽管我的标题与其他一些问题相似,但我已经查看了此处的问题,但没有发现任何类似的问题。我正在处理的站点可以创建 collection 请求,然后在 table 中查看它们以管理现有请求。我使用的第一个查询有效并且 returns 正确的请求。原始查询如下所示。

var query = context.LogisticsRequests.AsQueryable().Where(x => x.Type == types.Collection.ToString());

添加了一个删除请求的新选项,但这只是数据库中名为 isDeleted 的新列,这样请求就从 table 中删除了,但仍然有一个存档副本。因此,为了过滤掉已删除的请求,我更新了查询,如下所示。

var query = context.LogisticsRequests.AsQueryable().Where(x => x.Type == types.Collection.ToString() && x.isDeleted != true);

更改查询后,没有返回任何结果,我不明白为什么,只有一个请求被设置为删除,而其他大多数请求将具有空值,因此它们仍应返回,因为它们不等于 true。我在下面包含了一些屏幕截图,显示了查询结果和发送到数据库的查询。感谢您的任何帮助或建议。

发送到数据库的查询:

    {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))
}

再次感谢您的帮助。

确保 IsDelete 列中必须有值。对于所有记录,它必须是 truefalse。确保您没有将 null 存储在 IsDelete 列中。如果它为空,则必须设置 truefalse.

将您的查询更改为

var query = context.LogisticsRequests.AsQueryable().Where(x => x.Type == types.Collection.ToString() && !(x.isDeleted == null ? false : x.IsDeleted));

您应该检查新列 "isDeleted" 是否已填充所有行。如果该列是新创建的,它可能包含 null,因此 SQL 查询将失败。用 truefalse.

填充 table

此外,如评论中所述,您应该使用“!isDeleted”。

对此很好奇

Where(x => x.Type == types.Collection.ToString()

类型是类型的集合吗?那么它应该是

 types.Collection.Contains(x.Type)

像这样

Where(x => types.Collection.Contains(x.Type) && !x.isDeleted)