2016-11-18 1 views
0

일부 속성을 배열로 선택하기 위해 LINQ 쿼리를 수정하려고하지만 일부분을 얻기 위해 고심 중입니다.LINQ 배열로 선택

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

SecondaryField라는 두 번째 속성이 null이 아니거나 빈 문자열이면 첫 번째 Select 문의 결과에 추가되도록 수정해야합니다.

예를 들어 entity.Properties가 포함되어있는 경우 :

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

나는 돌아 첫 번째 선택 문을 싶습니다

{ "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 = "" }, 
}; 

그리고이 컬렉션에서 비어 있지 않은 값을 가진 속성을 모두 배열로 선택하려고합니다. 다음,

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

당신은 두 속성의 값을 포함하는 새로운 배열을 선택 원하지 않는 값을 필터링하고, 다시 배열로 결과를 돌려 :

당신은 SelectMany()를 사용하여 수행 할 수 있습니다.

+0

완벽하게 감사드립니다. –

1

이 매우 간단해야한다 - 널/빈 상자를 제거하고 배열로 전환하기 위해 Where를 사용, 두 필드를 얻을 :

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

라이브 예 : http://rextester.com/MHM61977