0

Nameプロパティで識別されるtargetListにセミコロンが含まれている後、sourceList値の1つが含まれているかどうかを知りたいです。それがtrueの場合、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()));
4

3 に答える 3

1

私はあなたが何を目指しているのかを100%確信しているわけではありませんが、これが私の最善の推測です:

sourceList
    .Select(x => x.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries).Last())
    .Intersect(targetList.Select(x => x.Name))
    .Any();

これは、2つのシーケンスを作成します

  1. 後半sourceList(セミコロン後)
  2. のnameプロパティtargetList

Select

次にIntersect、2つのシーケンスが共通して共有するアイテムを返すために使用します。

最後にAny、何かが返されたかどうかを判断するために使用しますIntersect(これはすぐに理解できると思います)。

于 2012-11-28T20:23:29.353 に答える
0

Any代わりに別のものが必要なようですAll

bool exists = sourceList
    .Select(s => s.Split(new[] { ';' }, StringSplitOption.RemoveEmptyEntries).Last())
    .Any(v => targetList.Any(t => s == t.Name));
于 2012-11-28T20:29:04.013 に答える
0

基本的に2つのセットがあり、それらの交差が空でないかどうかを確認する必要があります。Intersect便利な拡張メソッドのおかげで、まさにそれを行う必要があります。

var source = sourceList.Select(s=>s.Split(';')[1]);
var target = targetList.Select(t=>t.Name);

return source.Intersect(target).Count() > 0;
于 2012-11-28T20:34:12.970 に答える