나는 정규식 패턴과 일치하며 원하는 출력을 생성하기 위해 Linq를 디자인하는 데 어려움을 겪고 있습니다.Linq with Regex
데이터가 고정 길이는이 경우
길이이다 1231234512341234567
: 3, 5, 4, 7
는
사용할 정규식 패턴이다 (.{3})(.{5})(.{4})(.{7})
이 모두 작동 전혀 문제 및 패턴 매칭 결과는 그러나 예상대로 원하는 출력은 다소 어려움이 입증됩니다. 사실, 필자는 피벗 쿼리를 제외하고 SQL 용어로 무엇이 불릴 지 확신하지 못합니다.
field1:value1;value2;value3;valueN;field2:value2;value3;valueN;
아래의 LINQ 표현을 사용하여, 나는이 필드 1-값 1, FIELD2-값 2를 얻을 수있었습니다 : 원하는 출력은 지정된 위치에 각 그룹에서 모든 값을 예를 들어, 그래서 그들을 연결하는 것입니다 , 등 ...
var matches = Regex.Matches(data, re).Cast<Match>();
var xmlResults = from m in matches
from e in elements
select string.Format("<{0}>{1}</{0}>", e.Name, m.Groups[e.Ordinal].Value);
하지만 난 그렇게에 위치 2에서 다음 요소의 서수 사용하여 "그룹"에서 모든 값을 위치 1에서 모든 값을 얻을하는 방법을 알아낼 수 없습니다.
이 예제의 "요소"는 필드 이름 및 순서 위치 모음입니다 (1에서 시작). 이 다음과 같아야 :
public class Element
{
public string Name { get; set; }
public int Ordinal { get; set; }
}
var elements = new List<Element>{
new Element { Name="Field1", Ordinal=1 },
new Element { Name="Field2", Ordinal=2 }
};
나는 여러 가지의 LINQ 표현의 무리를 검토하고 일부 피벗 타입의 LINQ 식을 파고,하지만 그들 중 누구도 내게 가까이를 얻을 것 - 그들은 모두 조인 연산자를 사용하는 I 가능하다고 생각하지 마십시오.
누구든지이 Linq 만드는 법을 알고 있습니까?
감사합니다. –
가깝습니다. 첫 번째 SelectMany가 올바른 경로에있는 것처럼 보입니다. 그러나 요소 이름을 한 번에 여러 값으로 출력하려면 어떻게해야합니까? 또한 XML을 출력하지 않는다는 점에 유의하십시오. 이는 독점적 인 형식입니다. –
@ChrisGessler 별도의 태그에 넣고 싶지 않으면'SelectMany'가 필요하지 않습니다.'string.Format'과'string.Join'을 사용하는 간단한'Select'에서 바로 연결할 수 있습니다. 업데이트). – dasblinkenlight