我想知道在Name属性标识的targetList中包含分号后的一个sourceList值。如果这是真的,则必须返回bool值。
它没有用,但我尝试了一些......
我猜我的linq不正确。所有的东西......
" FoundSomething"包含在targetList中,因此它应该返回TRUE。
var sourceList = new String[]
{
"1;HideButton",
"2;ShowButton",
"3;HideButton",
"4;ShowButton",
"5;HideButton",
"6;ShowButton",
"7;HideButton",
"8;ShowButton",
"9;HideButton",
"10;FoundSomething",
};
var targetList = new List<GlobalConfiguration>()
{
new GlobalConfiguration{ Name = "444" },
new GlobalConfiguration{ Name = "fdsdffd" },
new GlobalConfiguration{ Name = "44" },
new GlobalConfiguration{ Name = "fsdd" },
new GlobalConfiguration{ Name = "fs4rtref" },
new GlobalConfiguration{ Name = "ftrtras" },
new GlobalConfiguration{ Name = "FoundSomething" },
};
Boolean exists = sourceList.Any(a => targetList.All(c => c.Name == a.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries).Last()));
答案 0 :(得分:1)
我不是百分百肯定我理解你的目标,但这是我最好的猜测:
sourceList
.Select(x => x.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries).Last())
.Intersect(targetList.Select(x => x.Name))
.Any();
这样做会产生两个序列
sourceList
的后半部分(分号后)targetList
Select
。
然后它使用Intersect
返回两个序列共有的任何项目。
最后,它使用Any
来确定是否从Intersect
返回了任何内容(我认为这很容易理解)。
答案 1 :(得分:0)
看起来你想要另一个Any
而不是All
:
bool exists = sourceList
.Select(s => s.Split(new[] { ';' }, StringSplitOption.RemoveEmptyEntries).Last())
.Any(v => targetList.Any(t => s == t.Name));
答案 2 :(得分:0)
你基本上有两套,你想看看它们的交集是否为空。你应该这样做,这要归功于方便的Intersect
扩展方法。
var source = sourceList.Select(s=>s.Split(';')[1]);
var target = targetList.Select(t=>t.Name);
return source.Intersect(target).Count() > 0;