如何从LINQ获取IEnumerable <foo>而不是IEnumerable <string>?

时间:2017-09-07 15:49:22

标签: c# entity-framework linq

我遇到了LINQ查询,我试图使用SQL TableEntityFramework 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查询以获取我想要的结果。

任何正确方向的推动都会很棒。

2 个答案:

答案 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,因为它对于像这样的成员资格检查效果会更好。