【发布时间】:2014-04-18 21:14:50
【问题描述】:
我有一个奇怪的情况,我找不到 Linq 2 实体查询不返回结果的方法。
第一个查询是返回结果,但第二个没有返回结果。
summaryData = db.PromoSummary.Where(x => x.Month == state.OldPromoStart.Month).ToList();
summaryData = db.PromoSummary.Where(x => (x.Month == state.OldPromoStart.Month) | (x.Month == state.OldPromoEndMonthMax)).ToList();
如果“A”为真,那么“A or B”也应该为真...(在这种情况下,第一个语句为真,所以无论第二个语句如何,它都应该返回结果,对吧?)
附: db 是 DbContext,PromoSummary 是 DbSet
任何想法我做错了什么?
编辑
此 PromoSummary DbSet 包含 Month==9 的行,但没有 Month == 10 的行。我更改了 |到||,但结果是一样的——第一个查询返回结果,但第二个查询返回0条记录...
summaryData = db.PromoSummary.Where(x => x.Month == 9).ToList();
summaryData = db.PromoSummary.Where(x => (x.Month == 9) || (x.Month == 10)).ToList();
编辑#2
我想这就是 Andrew 的建议……为什么要进行“不为空”检查? 附:在数据库中的 Month 属性称为 SummaryMonth(使用 Fluent api 定义)还有一件事 - 此属性的类型为 byte
SELECT
[Extent1].[Id] AS [Id],
[Extent1].[CustomerId] AS [CustomerId],
[Extent1].[SummaryYear] AS [SummaryYear],
[Extent1].[SummaryMonth] AS [SummaryMonth],
[Extent1].[ThemeId] AS [ThemeId],
[Extent1].[CurrentStateId] AS [CurrentStateId]
FROM [PromotionSummary] AS [Extent1]
WHERE ((9 = ( CAST( [Extent1].[SummaryMonth] AS int)))
AND ( CAST( [Extent1].[SummaryMonth] AS int) IS NOT NULL))
OR ((10 = ( CAST( [Extent1].[SummaryMonth] AS int)))
AND ( CAST( [Extent1].[SummaryMonth] AS int) IS NOT NULL))
【问题讨论】:
标签: c# entity-framework linq-to-entities