我有一个Bit类型的列(在本例中称为BBoolVal)。
我有一个LinqToSQL声明像这样:
var query = List<MyClass> myList = _ctx.DBList
.Where(x => x.AGuidID == paramID)
.Where(x => x.BBoolVal == false);
当我查看sql时,它最终会像这样(我添加了间距并更改了名称):
SELECT [t0].[Id], [t0].[AGuidID], [t0].[OtherIDID],
[t0].[TimeColumn], [t0].[BBoolVal], [t0].[MoreID]
FROM [dbo].[MyTable] AS [t0]
WHERE (NOT ([t0].[BBoolVal] = 1)) AND ([t0].[AGuidID] = @p0)
因为我的x.BBoolVal == false转换为[BBoolVal] == 1我收集false = 1(因此true = 0)。
我在问,因为这对我来说似乎有些倒退。我很乐意接受它,我只想确定。
答案 0 :(得分:4)
NOT
之前有一个[BBoolVal] = 1
,所以它就像你最初预期的那样 - 布尔true
是1
而false
可能是零。
答案 1 :(得分:2)
注意它说WHERE( NOT ([t0]。[BBoolVal] = 1))AND([t0]。[AGuidID] = @ p0)
虽然它确实是奇怪的,但它实际上和[t0]相同。[BBoolVal] = 0
修改
考虑一下,这样BBoolVal将匹配False或NULL(假设BBoolVal可以为空)。
答案 2 :(得分:1)
1为真,0为假;但是Bool.Parse()适用于.ToString()值。