我遇到了LINQ查询,我试图使用SQL Table
从EntityFramework 6
返回列表记录,而不是获取该列表,我最终得到{{1} }。
这是我为获得IEnumerable<string[]>
所做的。我在IEnumerable<string[]>
中有column
需要拆分,然后我测试table
是否包含这些字符串:表格列list
中的值可以是像这样的columnOne
或"a-b"
等,因此需要使用此"b-c"
s.columnOne.Split('-')
上面的工作原理应该如此,但最后会返回list<string> checkList = new list<string>();
checkList.add("a")
checkList.add("b")
checkList.add("c")
List<Foo> fooList = dbContext.Foos.ToList();
IEnumerable<string[]> items = fooList.Select(s => s.columnOne.Split('-'));
var result = items.SelectMany(x => x)
.Where(s => checkList.Contains(s)).ToList();
的列表,这不是我需要的。
我在下面尝试了这个:
string
这就是我遇到错误的地方,因为我最终要返回List<Foo> fooList = dbContext.Foos.ToList();
var test = fooList.Where(s => s.columnOne.Split('-'));
的列表,而不是<Foo>
现在我知道<string>
子句需要返回一个Where
值,例如bool
,但我不知道如何构建LINQ查询以获取我想要的结果。
任何正确方向的推动都会很棒。
答案 0 :(得分:6)
where子句需要包含对checkList
var test = fooList.Where(foo => foo.columnOne.Split('-').Any(str => checkList.Contains(str)));
答案 1 :(得分:1)
dbContext.Foos
.ToList()
.Where(foo => foo.columnOne.Split('-')
.Any(x => checkList.Contains(x))
我希望你没有很多Foo
因为ToList
函数会将它们全部读入内存。但是,您需要这样做,因为我不认为Linq能够理解如何翻译where
语句。如果这对你来说是个问题,有几种方法可以解决这个问题。
另外,请考虑为Set<string>
变量使用List<string>
而不是checklist
,因为它对于像这样的成员资格检查效果会更好。