LinqToSql OrderBy는 효과가 없습니다.

먹다

이 방법으로 GridView에 LinqToSql-DataSource를 사용하고 있습니다.

                wsv.wsv2DataContext db = new wsv.wsv2DataContext();
                e.KeyExpression = "id";
                e.QueryableSource = (from mitgliedschaft in db.mitgliedschaft

                                     join person in db.person on mitgliedschaft.person_id equals person.id
                                     join institution in db.institution on mitgliedschaft.verein_id equals institution.id

                                     select new
                                     {
                                         vorname = person.vorname,
                                         nachname = person.nachname,
                                         nameVerein = institution.name,
                                         vereinid = mitgliedschaft.verein_id,
                                         id = mitgliedschaft.id,
                                         verbandsMitgliedsNummer = person.verbandsMitgliedsNummer,
                                         strasse = person.strasse,
                                         plz = person.plz,
                                         ort = person.ort,
                                         geburtsdatum = person.geburtsdatum,
                                         geschlechtid = person.geschlechtid,
                                         statusid = mitgliedschaft.statusid,
                                         bezirk_id = mitgliedschaft.bezirk_id,
                                         kreis_id = mitgliedschaft.kreis_id,
                                         person_id = mitgliedschaft.person_id.Value,
                                         deletedFlag = mitgliedschaft.deletedFlag,
                                         stammverein = mitgliedschaft.stammVerein,
                                         eintrittsdatum = mitgliedschaft.eintritt
                                     }).GroupBy(p => p.person_id).Select(p => p.First());
            }

이제 선택을 주문하고 싶습니다. 처음에 "stammVerein" - 테이블 "mitgliedschaft"의 열이 내림차순이고 테이블 "mitgliedschaft"의 열 "eintritt"입니다. 여러 가지 방법을 시도했습니다.

                wsv.wsv2DataContext db = new wsv.wsv2DataContext();
                e.KeyExpression = "id";
                e.QueryableSource = (from mitgliedschaft in db.mitgliedschaft

                                     join person in db.person on mitgliedschaft.person_id equals person.id
                                     join institution in db.institution on mitgliedschaft.verein_id equals institution.id

                                     orderby mitgliedschaft.stammVerein descending, mitgliedschaft.eintritt

                                     select new
                                     {
                                         ...

                                     }).GroupBy(p => p.person_id).Select(p => p.First());
            }

그리고:

                wsv.wsv2DataContext db = new wsv.wsv2DataContext();
                e.KeyExpression = "id";
                e.QueryableSource = (from mitgliedschaft in db.mitgliedschaft

                                     join person in db.person on mitgliedschaft.person_id equals person.id
                                     join institution in db.institution on mitgliedschaft.verein_id equals institution.id

                                     select new
                                     {
                                         ...

                                     }).GroupBy(p => p.person_id).Select(p => p.First()).OrderByDescending(stamm => stamm.stammverein).ThenBy(eintritt => eintritt.eintrittsdatum);
            }

그리고:

                wsv.wsv2DataContext db = new wsv.wsv2DataContext();
                e.KeyExpression = "id";
                e.QueryableSource = (from mitgliedschaft in db.mitgliedschaft

                                     join person in db.person on mitgliedschaft.person_id equals person.id
                                     join institution in db.institution on mitgliedschaft.verein_id equals institution.id

                                     select new
                                     {
                                         ....

                                     }).OrderByDescending(stamm => stamm.stammverein).ThenBy(eintritt => eintritt.eintrittsdatum).GroupBy(p => p.person_id).Select(p => p.First());

그러나 이것의 어떤 것도 효과가 없습니다! 저는 이런 종류의 DataSource 및 Linq에서 매우 새로운 것입니다.

누구든지 이 명령을 수행하는 데 도움을 줄 수 있습니까?

스티브 파이

그룹화된 결과 내의 항목은 순서를 유지하지 않습니다. 주문을 고려하는 방법에 따라 그룹화 이후, 이전 및/또는 이후에 수행해야 합니다 First.

이를 수행하려면 SQL을 Linq QL(조인 등)로 대체하는 대신 EF의 관계를 탐색 속성으로 매핑하는 것이 가장 쉽습니다.

다음 기본 쿼리 사용:

var query = db.mitgliedschaft
    .GroupBy(m => m.Person); // Group by related entity, not ID

예를 들어 그룹화 기준 다음에 개인별로 그룹화된 레코드 세트가 있습니다. 가장 이른 관련 레코드가 있는 첫 번째 개인을 원하는 경우:

var result = query.OrderByDescending(g => g.Key.mitgliedschafts.Max(stamm => stamm.stammverein)
    .ThenBy(stamm => stamm.eintritt.eintrittsdatum)
    .First();

이것은 당신의 스키마와 엔티티 관계에 대해 대략적인 추측을 하고 있지만, 당신이 적합한 것을 찾는 데 도움이 되기를 바랍니다. 나는 eintritt가 무엇이고 그것이 당신의 엔티티 모델과 어떻게 관련되는지 추측할 수 있을 뿐입니다.

초기 쿼리는 그룹화하려는 기본 엔터티만 가져와 관련 엔터티별로 그룹화합니다. 해당 그룹화의 결과는 키가 Person인 Grouped mitgliedschafts 세트가 됩니다. 가장 최근의 mitgliedschafts를 가진 사람을 기준으로 이러한 그룹을 Max정렬하기 위해 내림차순 요청이 제공된 컬렉션 값을 사용하여 Key의 연결된 mitgliedschafts에 대한 orderby를 사용합니다 .

그런 First다음 첫 번째 그룹화된 mitgliedschafts 컬렉션을 제공합니다.

그런 다음 가장 최근 사람을 가져온 후 mitgliedschafts의 결과 목록을 정렬하려면 다음을 수행하십시오.

var result = query.OrderByDescending(g => g.Key.mitgliedschafts.Max(stamm => stamm.stammverein)
    .ThenBy(stamm => stamm.eintritt.eintrittsdatum)
    .First().OrderByDescending(stamm => stamm.stammverein)
    .ThenBy(stamm => stamm.eintritt.eintrittsdatum)
    .ToList();

두 번째 OrderBy 절 세트는 선택된 그룹 또는 mitgliedschafts에 적용됩니다.

원하는 뷰 모델을 구성하려면 a Select()삽입 하여 ToList().

탐색 속성을 사용하면 그룹 기준에 의존하지 않고 이 작업을 수행할 수 있습니다. 직감적으로 다음과 같은 것은 비슷한 것을 반환해야 합니다.

var query = db.Person
    .OrderByDescending(p => p.mitgliedschafts.Max(stamm => stamm.stammverien))
    .ThenBy(stamm => stamm.eintritt.eintrittsdatum)
    .SelectMany(p => p.mitgliedschafts)
    .OrderByDescending(stamm => stamm.stammverien)
    .ThenBy(stamm => stamm.eintritt.eintrittsdatum)
    .Select(stamm => new { ... })
    .ToList();

여하튼, 탐색 속성이 매핑되어 있거나 설정할 수 있는 경우 시도할 사항에 대한 아이디어를 제공하기를 바랍니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

@JsonTypeInfo는 효과가 없습니다.

ValueGeneratedOnAdd는 효과가 없습니다.

SetThreadAffinityMask는 효과가 없습니다.

다른 효과가 작동하는 동안 "Label.AdjustsFontSizeToFitWidth"효과는 효과가 없습니다.

cv :: rotate가 효과가없는 것 같습니다.

<p : selectOneMenu caseSensitive = "true">가 효과가없는 것 같습니다.

glOrtho가 효과가없는 것 같습니다.

macOS 10.13.4-`renice`가 효과가없는 것 같습니다.

CELERY_ALWAYS_EAGER가 효과가없는 것 같습니다.

spark.executorEnv가 효과가없는 것 같습니다.

on_delete = 'CASCADE'가 효과가없는 것 같습니다

JSTL c : if 태그가 효과가없는 것 같습니다.

clipsToBounds는 UIStackView에서 효과가없는 것 같습니다.

빛나는 fluidRow는 효과가 없습니다.

휴식 시간에는 시각 효과가 없습니다.

Django 1.7 makemigrations는 효과가 없습니다.

변환 클래스는 효과가 없습니다

JQuery 코드는 효과가 없습니다.

봄 부팅 : forward-headers-strategy는 효과가 없습니다.

gluLookAt()는 OpenGL에서 효과가 없습니다.

np transpose 및 squeeze는 효과가 없습니다.

DebuggerDisplayAttribute는 VS 2017에서 효과가 없습니다.

"spark.memory.fraction"이 효과가없는 것 같습니다.

loadkeys는 (거의) 효과가 없습니다

Google Sheets API CopyPasteRequest는 효과가 없습니다.

browser.storage.local.set이 효과가없는 것 같습니다.

VueJs 필터는 효과가 없습니다.

SSH-PasswordAuthentication no는 효과가 없습니다.

TForm.PixelsPerInch는 Delphi Rio 10.3.3에서 효과가 없습니다.

TOP 리스트

뜨겁다태그

보관