일부 조건에 따라 정렬 된 IQueryable이 있습니다. 이제 IQueryable에서 특정 요소의 위치를 알고 싶습니다. 거기에 linq 표현식이 있나요? 말해 예를 들어 내가 번호를 얻으려면, 거기에 IQueryable의 10 개 요소는 다음과 6 요소는 조건에 일치 6.IQueryable에서 요소의 위치를 결정하십시오.
답변
먼저 항목을 필터링하여, 그 인덱스를 각 항목을 선택하고, 마지막으로 원래의 인덱스 추출 :
var result = orderedList
.Select((x, i) => new { Item = x, Index = i })
.Where(itemWithIndex => itemWithIndex.Item.StartsWith("g"))
.FirstOrDefault();
int index= -1;
if (result != null)
index = result.Index;
시험대 :
class Program
{
static void Main(string[] args)
{
var orderedList = new List<string>
{
"foo", "bar", "baz", "qux", "quux",
"corge", "grault", "garply", "waldo",
"fred", "plugh", "xyzzy", "thud"
}.OrderBy(x => x);
// bar, baz, corge, foo, fred, garply, grault,
// plugh, quux, qux, thud, waldo, xyzzy
// Find the index of the first element beginning with 'g'.
var result = orderedList
.Select((x, i) => new { Item = x, Index = i })
.Where(itemWithIndex => itemWithIndex.Item.StartsWith("g"))
.FirstOrDefault();
int index= -1;
if (result != null)
index = result.Index;
Console.WriteLine("Index: " + index);
}
}
출력 :
Index: 5
+ 1- 나는 내 대답에서 똑같은 방식으로했습니다. – RichardOD
이 솔루션은 모든 작업에 대해 SQL을 생성합니까 아니면 메모리에서 작업을 수행 한 후에 만 IQueryable의 모든 항목을 선택합니까? –
그 앞의 값을 열거하는 효과가 있지만 당신은 query.TakeWhile(x => !matchesCondition(x)).Count()
같은 것을 사용할 수있는 네가 원하는대로되지 않을 수도있다.
어쨌든 이전 값을 통해 열거해야합니다. 그렇지 않습니까? – treaschf
흥미로운 솔루션. 앞의 값이 메모리 객체이면 열거하지만 DB는 열거하지 않는 것이 좋습니다. 요소가 목록에 없으면이 함수는 목록의 길이를 반환합니다. 일반적으로 이러한 함수는 -1 또는 아마도 null을 반환한다고 기대할 수 있습니다. –
@Mark Byers : 질문의 구절은 원하는 요소가 존재하는 것으로 알려져 있고 위치 만이 필요하다는 것을 암시한다고 읽었습니다. DB 시나리오는 참으로 열거에 대한 나의 관심사였습니다. 실제로 IQueryable에 이렇게하는 것이 현명하지 않다고 생각하지만 빠른 해킹으로이 방법은 적어도 간결하고 이해할 수 있습니다. –
을 술어 fu에 대한 매개 변수로] 렉션 색인을 incldes하는 "Where"기능의 절점을 사용할 수도 있습니다 . 자세한 내용은 MSDN을 참조하십시오.
var result = Enumerable.Range(0, 10).Where((x, i) => i == 6);
6 번째 요소가 없으면 버전이 비어있을 수 있습니다. 또한 결과를 반복 할 때까지 where 절을 평가하지 않습니다.
- 1. Emacs : 파일에서 위치를 결정하십시오.
- 2. 모든 자식 요소의 너비를 결정하십시오.
- 3. 요소의 위치를 다른 요소의 위치에 바인딩
- 4. ClickOnce 배포를 사용하여 소프트웨어를 설치할 위치를 결정하십시오.
- 5. PHP로 함수가 호출 된 위치를 결정하십시오.
- 6. 파이썬 로깅을 사용하여 메소드 호출 위치를 결정하십시오.
- 7. 요소의 순서는 IQueryable에서 동일 조건으로 쿼리 할 때마다 달라집니다.
- 8. 요소의 상단 위치를 얻는 방법?
- 9. 하위 요소의 위치를 얻는 방법
- 10. 하단 페이지 요소의 위치를 가져
- 11. LINQ : IQueryable에서 항목 제거
- 12. 윈도우에서 wpf 요소의 위치를 찾으려면 어떻게해야합니까?
- 13. jQuery 정렬에있는 모든 요소의 위치를 추적하십시오.
- 14. CSS3 변형은 요소의 왼쪽 위치를 변경하지 않습니까?
- 15. StackPanel에서 요소의 위치를 얻는 방법은 무엇입니까?
- 16. CSS에서 요소의 백분율로 음수 위치를 지정하려면 어떻게해야합니까?
- 17. jQuery를 : 정수 형식으로 요소의 픽셀 위치를 얻기
- 18. 본문 좌표에서 HTML 요소의 위치를 얻습니다.
- 19. 클릭 한 요소의 위치를 찾는 방법은 무엇입니까?
- 20. 창 구성 요소의 위치를 지정하는 위치는 무엇입니까?
- 21. Swing 요소의 화면 위치를 얻는 방법은 무엇입니까?
- 22. Func 목록으로 IQueryable에서 .Select() 수행
- 23. IList 또는 IQueryable에서 개체 검색
- 24. 컨트롤의 보이는 영역을 결정하십시오.
- 25. 진정한 북쪽을 결정하십시오.
- 26. iPhone 사용자의 국가를 결정하십시오
- 27. 재생 중에 오디오의 출처를 결정하십시오.
- 28. IQueryable에서 ToArray를 호출하면 LinqToSql에서 엔티티가 분리됩니까?
- 29. IQueryable에서 동적 "WHERE IN"(linq to SQL)
- 30. 셀레늄 : 현재 커서가있는 요소의 위치를 어떻게 얻을 수 있습니까?
여섯 번째 요소가 일치하면 숫자 5를 얻지 않으시겠습니까? 일반적으로 첫 번째 요소에는 인덱스 0이 있고 두 번째 인덱스에는 1 등이 있습니다. –
네가 원했던 것과 그 아래의 대답은 잘 작동합니다. – San