Linq,扩展方法,Lambda表达式和Bool's

Rod*_*ley 2 c# linq linq-to-entities iqueryable .net-3.5

问候,我在使用Linq to Entities获得的IQueryable对象的Where子句扩展方法中使用bool操作时遇到了一些问题.第一个例子显示了使用Bool1作为我需要移动到where子句扩展方法的操作.第二个例子是改变后不起作用的.Bool1完全被忽略,不会影响结果.

例1:

var results =
     from a in context.aTable1
     where a.Bool1 == false && a.Bool2  == false
     select new
     {
           Column1 = a.Column1
           Bool1 = a.Bool1
           Bool2 = a.Bool2
     };

results.Where(l => l. Column1.Contains(fooString));
Run Code Online (Sandbox Code Playgroud)

例2:

var results =
     from a in context.aTable1
     where a.Bool2  == false
     select new
     {
           Column1 = a.Column1
           Bool1 = a.Bool1
           Bool2 = a.Bool2
     };

results.Where(l => l.Bool1 == false);
results.Where(l => l. Column1.Contains(fooString));
Run Code Online (Sandbox Code Playgroud)

这些都是简化的例子,但我希望它们能说明我想要做的事情.where扩展方法在不同的方法中,并且是我在创建原始查询时无法完成的原因.

我尝试了以下其他方式与where子句做同样的事情:

results.Where(l => !l.Bool1);
results.Where(l => l.Bool1.Equals(false));
Run Code Online (Sandbox Code Playgroud)

它们具有相同的效果,但没有任何效果.

Luk*_*keH 5

您的第二次和第三次查询会"丢失",因为您没有将它们分配给任何内容.尝试这样的事情:

var results = from a in context.aTable1
              where !a.Bool2
              select new
              {
                  Column1 = a.Column1
                  Bool1 = a.Bool1
                  Bool2 = a.Bool2
              };

results = results.Where(l => !l.Bool1);
results = results.Where(l => l.Column1.Contains(fooString));
Run Code Online (Sandbox Code Playgroud)