2016-11-18 14 views
0

LINQクエリを変更していくつかのプロパティを配列に選択しようとしていますが、その一部を達成するのに苦労しています。LINQ select into array

toRun.AddRange(entity.Properties 
     .Select(property => property.PrimaryField) 
     .Select(field => new { field, entity = entity.EntityName, table = field.Table, key = entity.EntityIdField }) 

ようSecondaryFieldと呼ばれる第二の特性は、それが最初のSELECT文の結果に追加されますnullまたは空の文字列でない場合、私は、この改正を必要とします。例えば

entity.Propertiesが含まれている場合:

Property { PrimaryField = "a", SecondaryField = "b" }, 
    Property { PrimaryField = "c", SecondaryField = "" } 

を私が返すように最初のSelectステートメントたい:

{ "a", "b", "c" } 

は、任意のヘルプのおかげで感謝しています。

+0

すべてのPrimaryFieldと、空でない、またはnullでないすべてのSecondaryFieldのリストが必要ですか? – bixarrio

+3

あなたのタイトルと質問の両方が不明で、コードブロックと出力の関係は実際には分かりませんが、 '.SelectMany(p => new {] {p.PrimaryField、p .SecondaryField).Where(p =>!string.IsNullOrWhitespace(p)) '? – CodeCaster

+0

@CodeCasterそれは私が考えていたものです。 –

答えて

2

これは何を再現するようです欲しい:コレクションを持っている

そのうち

public class Foo 
{ 
    public string Bar { get; set; } 
    public string Baz { get; set; } 
} 
:あなたは二つのプロパティを持つクラスを持っている

var foos = new List<Foo> 
{ 
    new Foo { Bar = "a", Baz = "b" }, 
    new Foo { Bar = "c", Baz = "" }, 
}; 

このコレクションから、空でない値を持つすべてのプロパティを配列に選択するとします。

あなたはSelectMany()を使用して行うことができます。

var result = foos.SelectMany(f => new[] { f.Bar, f.Baz }) 
       .Where(p => !string.IsNullOrWhiteSpace(p)) 
       .ToArray(); 

あなたはしたくない値を除外し、その後、両方のプロパティの値を含む新しい配列を選択し、再び配列に結果を回します。

+0

完全に感謝しました –

1

これは非常にシンプルであるべき - 、両方のフィールドを取得し、ヌル/空にを削除すると、アレイに有効にWhereを使用します。

var result = entity.Properties.SelectMany(p =>new[]{ p.PrimaryField,p.SecondaryField}) 
      .Where(x => !String.IsNullOrEmpty(x)) 
      .ToArray(); 

ライブ例:http://rextester.com/MHM61977