您好我是linq和lambda的新手
我有两个列表
fl.LocalOpenFiles ...
List<string> f....
有一个属性(字符串),例如取索引0
fl.LocalOpenFiles[0].Path
我想从第一个列表fl.LocalOpenFiles
中选择所有fl.LocalOpenFiles.Path
,其中List<string> f
以List<LocalOpenFile> lof = new List<LocalOpenFile>();
lof = fl.LocalOpenFiles.Join(
folders,
first => first.Path,
second => second,
(first, second) => first)
.ToList();
我终于得到了这个......
first.Path == second
但它只是选择符合要求f[<any>] == fl.LocalOpenFiles[<any>].Path.Substring(0, f[<any>].Length)
的文件夹而我无法找到一种方法来获取我想要的数据,这符合这个“braindump”要求:
List<string> f = new List<string>{ "abc", "def" };
List<LocalOpenFile> lof = new List<LocalOpenFile>{
new LocalOpenFile("abc"),
new LocalOpenFile("abcc"),
new LocalOpenFile("abdd"),
new LocalOpenFile("defxsldf"),)}
// Result should be
// abc
// abcc
// defxsldf
另一个例子......
{{1}}
我希望我以一种可以理解的方式解释它:) 谢谢你的帮助
答案 0 :(得分:1)
你的意思是这样的:
List<LocalOpenFile> result =
lof.Where(file => f.Any(prefix => file.Path.StartsWith(prefix)))
.ToList();
答案 1 :(得分:0)
您可以使用常规where
代替联接,这样可以更直接地控制选择标准;
var result =
from file in lof
from prefix in f
where file.Path.StartsWith(prefix)
select file.Path; // ...or just file if you want the LocalOpenFile objects
请注意,匹配多个前缀的文件可能会出现多次。如果这是一个问题,您只需添加对Distinct
的调用即可消除重复项。
编辑:
如果你 - 在这种情况下似乎 - 只想知道匹配的路径而不是它匹配的前缀(即你只想要一个集合中的数据,就像这种情况一样),我会去@ har07&#39;而是Any
解决方案。