linq中的两个foreach?
问题描述:
...我试过一些东西,但我得到了“本地序列不能用于查询运算符的LINQ to SQL实现,但Contains运算符除外”。例外。 我说的是这样的:linq中的两个foreach?
Query = Query.Where(t => this.SysTextBox.Text.CSL2Array().All(ss => t.SysName.Contains(ss)));
我是一种新的,但我一直在试图使其工作。先谢谢你!
答
你应该能够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>();
答
var arr = this.SubSystemTextBox.Text.CSL2Array();
var notContained = Query.Where(td=>arr.Any(ss => !td.SubsystemName.Contains(ss)));
Query = Query.Except(notContained);
你可以弄清楚如何使它在一行中,这只是为了清楚。
什么是'CSL2Array'? – Servy 2014-09-19 14:18:23
哦。它只是从SubSystemTextBox.Text中返回一个数组。它用逗号分割字符串。 – M1693 2014-09-19 14:21:50
显然,查询提供程序无法将其转换为SQL代码。你不需要在表达式中这么做,这是错误信息告诉你的。 – Servy 2014-09-19 14:24:24