2012-07-08 83 views
0

我试着去筛选一个观察的集合,像这样过滤观察到的集合

var IEquip = from eq in this.reportDocument.Document.InspectionData.Equipments where eq.PartData.ReportIncluded = true 
          orderby eq.PartData.Order ascending 
          select eq; 

这似乎是工作的查询,但是当我尝试迭代槽IEquip

foreach (EquipmentItem eq in IEquip) 
{ 
.... 
} 

所有ReportIncluded设置为true,我可以看到ReportIncluded被调用的setter。我已经清空了循环内部的逻辑,结果相同。所有ReportInclude都是在循环的第一次迭代中设置的。我缺少什么

回答

4

您正在使用赋值运算符,而不是平等的:

eq.PartData.ReportIncluded = true 
// instead of 
eq.PartData.ReportIncluded == true 
+0

Thx,在我的日子里写了很多VB6 – klashagelqvist 2012-07-09 13:23:42

3

不要混淆===。实际上,不需要将布尔值与truefalse文字进行比较(除非它是可空布尔值)。所以也许你可以只写where eq.PartData.ReportIncluded没有任何== true

+0

在其他情况下也会出现同样的问题,就像人们说'if(someVar = false){...}',他们实际上分配给'someVar'。如果'someVar'是一个纯布尔值,他们应该使用'if(!someVar)'代替。但是,如果'someVar'是一个可为空的布尔值('bool?'),他们可以说'if(someVar == false)'。 **的右边**将被自动“提升”为“(bool?)false”。好消息是'someVar =(bool?)false'的返回类型与'someVar ==(bool?)false'的返回类型不同,所以如果不小心使用'='而不是' =='可空。 – 2012-07-08 20:18:41