이 이을해야한다. 나는 그것을 구체적으로 테스트하지 않았다. 이 두 기록을 필요한 경우
var nextProducts = from item1 in recommendations.Select((rec, idx) => new { Rec = rec, Index = idx })
join item2 in recommendations.Select((rec, idx) => new { Rec = rec, Index = idx })
on item1.Index equals item2.Index - 1
where item1.Rec.Products.Any(p => p.Code == "A")
&& item1.Rec.Products.Any(p => p.Code == "B")
select item2.Rec;
,이 것 (select 문은
select new { MatchingItem = item1.Rec, NextItem = item2.Rec };
될 수있다 그러나 당신은 목록의 마지막 항목 인 일치하는 항목을 설명하는 그룹화를 수행해야 이 경우 다음 항목이 아님).
var nextProducts = from item1 in recommendations.Select((rec, idx) => new { Rec = rec, Index = idx })
join item2 in recommendations.Select((rec, idx) => new { Rec = rec, Index = idx })
on item1.Index equals item2.Index - 1
into groupjoin
from i2 in groupjoin.DefaultIfEmpty()
where item1.Rec.Products.Any(p => p.Code == "A")
&& item1.Rec.Products.Any(p => p.Code == "B")
select new { MatchingItem = item1.Rec, NextItem = i2 == null ? null : i2.Rec };
I 이 테스트 문자열 목록과 유사한 것이었다했던 코드입니다.
List<string> list = new List<string>() { "a", "b", "c", "a", "d", "a", "e" };
var query = from item1 in list.Select((s, idx) => new { Item = s, Index = idx })
join item2 in list.Select((s, idx) => new { Item = s, Index = idx })
on item1.Index equals item2.Index - 1
where item1.Item == "a"
select item2.Item;
b, d 및 e를 반환합니다. 이전 대답은 작동 Skip(1).Take(1)
를 사용
MyList.SkipWhile(item => item.Name != "someName").Skip(1).FirstOrDefault()
하지만, 하나 개의 결과 목록을 반환합니다 :
일을 SQL하는 역()이 작동하지 않습니다. –