C# Linq,其中扩展方法、Lambda表达式和Bool';s
您好,我在使用LINQtoEntities获得的IQueryable对象的Where子句扩展方法中使用bool操作时遇到了一些问题。第一个示例展示了使用Bool1作为操作的工作原理,我需要移动到where子句扩展方法。第二个例子是更改后不起作用的内容。Bool1被完全忽略,不会影响结果 例1:C# Linq,其中扩展方法、Lambda表达式和Bool';s,c#,linq,.net-3.5,linq-to-entities,iqueryable,C#,Linq,.net 3.5,Linq To Entities,Iqueryable,您好,我在使用LINQtoEntities获得的IQueryable对象的Where子句扩展方法中使用bool操作时遇到了一些问题。第一个示例展示了使用Bool1作为操作的工作原理,我需要移动到where子句扩展方法。第二个例子是更改后不起作用的内容。Bool1被完全忽略,不会影响结果 例1: var results = from a in context.aTable1 where a.Bool1 == false && a.Bool2 == false
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));
例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));
这些都是过于简化的例子,但我希望它们能说明我正在尝试做什么。where扩展方法位于不同的方法中,这是我创建原始查询时无法执行这些方法的原因
我尝试了以下其他方法来处理where子句:
results.Where(l => !l.Bool1);
results.Where(l => l.Bool1.Equals(false));
它们具有相同的效果,但没有任何效果。您的第二个和第三个查询正在“丢失”,因为您没有将它们分配给任何对象。请尝试以下方法:
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));
您没有将查询结果分配给任何对象。每次调用
Where()
都会返回该查询的结果,您需要对其进行处理
在您的情况下,您有几个选项(所有选项都会产生相同的最终结果):
- 如果要对非Bool1结果执行某些操作,可以选择将其保留:
var notBool1 = results.Where(l => !l.Bool1); var query = notBool1.Where(l => l.Column1.Contains(fooString));
- 您可以将
调用链接在一起:Where()
var query = results.Where(l => !l.Bool1) .Where(l => l.Column1.Contains(fooString));
- 这可能是最快的,尽管可能不会太快:
var query = results.Where(l => !lBool1 && l.Column1.Contains(fooString));
- 怎么样
results.Where(l => l.Bool1 == false && l.Column1.Contains(fooString));
您的
。当
查询返回集合时,它们不会修改调用它们的集合
var numbers = new int [] { 1,2,3,4,5,6};
numbers.Where(x => x % 2 == 0); // numbers still contains 1,2,3,4,5,6
var evens = numbers.Where(x => x % 2 == 0); // evens contains 2,4,6, numbers 1,2,3,4,5,6
numbers = numbers.Where(x => x % 2 == 0); // numbers now contains 2,4,6
DOH!!!我觉得自己很蠢,真不敢相信我竟然没有注意到我忘了分配它。谢谢你帮我摇滚!!