linq中的两个foreach?

问题描述:

...我试过一些东西,但我得到了“本地序列不能用于查询运算符的LINQ to SQL实现,但Contains运算符除外”。例外。 我说的是这样的:linq中的两个foreach?

Query = Query.Where(t => this.SysTextBox.Text.CSL2Array().All(ss => t.SysName.Contains(ss))); 

我是一种新的,但我一直在试图使其工作。先谢谢你!

+0

什么是'CSL2Array'? – Servy 2014-09-19 14:18:23

+0

哦。它只是从SubSystemTextBox.Text中返回一个数组。它用逗号分割字符串。 – M1693 2014-09-19 14:21:50

+3

显然,查询提供程序无法将其转换为SQL代码。你不需要在表达式中这么做,这是错误信息告诉你的。 – Servy 2014-09-19 14:24:24

你应该能够ToList后做查询:

Query = Query.ToList<TagsDeleted>() 
      .Where(t => this.SubSystemTextBox.Text.CSL2Array().All(ss => t.SubsystemName.Contains(ss))) 
      .AsQueryable<TagsDeleted>(); 

但是,这是不容易的阅读,我会重构以下,使之明确表示,“我创建一个列表,并希望删除一些项目“:

var words = this.SubSystemTextBox.Text.CSL2Array(); 
var list = Query.ToList<TagsDeleted>(); 
list.RemoveAll(t => !words.All(word => t.SubsystemName.Contains(word))); 
Query = list.AsQueryable<TagsDeleted>(); 
+0

So ToList可以做到这一点,这就是我一直在寻找的,谢谢!! :) – M1693 2014-09-22 07:21:35

+0

当你使用'AsEnumerable'而不是' ToList'。 – Dzienny 2015-07-03 08:27:11

var arr = this.SubSystemTextBox.Text.CSL2Array(); 
var notContained = Query.Where(td=>arr.Any(ss => !td.SubsystemName.Contains(ss))); 
Query = Query.Except(notContained); 

你可以弄清楚如何使它在一行中,这只是为了清楚。

+0

同样,“本地序列不能用于除Contains运算符以外的查询运算符的LINQ to SQL实现。” :( – M1693 2014-09-19 15:08:57

+0

但是,这就是我想要做的 – M1693 2014-09-19 15:28:46