나는 하나의 결과에 기업과 사람들을 표시하고 함께 주문하고 싶습니다.조건에 따라 1 식 또는 2 식으로 주문하는 방법은 무엇입니까?
의사 코드 :
if business name is not null
order by business name
else
order by first name then last name
나는 여러 테이블에 조인 (그리고 잘 작동) 다음과 같이 대략 보이는 구성 LINQ 쿼리가 있습니다.
var query = from x in ...
join business in dbContext.Businesses on ...
from businesses in bus.DefaultIfEmpty()
join person in dbContext.People on ...
from people in peo.DefaultIfEmpty()
select new Party
{
person.FirstName,
person.LastName,
business.Name,
};
나는 레코드가 비즈니스, 다른 사람의 성과 이름 인 경우에만 사업의 이름으로 된 주문 LINQ 식을 작성하는 방법을 작동하지 않을 수 있습니다. 내가 얻을 수있는 가장 가까운 것은 다음과 같습니다. 항상 사람 성으로 주문하는 것을 포함합니다 (기업의 경우에도). SQL로 변환
는var result =
whereQuery
.OrderBy(x => x.BusinessName != null ? x.BusinessName : x.PersonFirstName)
.ThenBy(x => x.PersonLastName);
:
ORDER BY CASE
WHEN [business].[Name] IS NOT NULL
THEN [business].[Name]
ELSE [person].[FirstName], [person].[LastName]
END
이 나는 분명히 (쓸 수 있도록하고 싶습니다 것입니다 올바른 구문되지 않습니다 :
ORDER BY CASE
WHEN [business].[Name] IS NOT NULL
THEN [business].[Name]
ELSE [person].[FirstName]
END, [person].[LastName]
내가하고 싶은 것은 허위 부분 용) :
var result =
whereQuery
.OrderBy(x => x.BusinessName != null ? x.BusinessName : x.PersonFirstName, x.PersonLastName);
기술적으로 너무 많은 차이점을 만들지는 않습니다. (비즈니스라면 사람 이름과 성이 null이므로 순서가 영향을받지 않아야합니다). 그러나 SQL은 여전히 할 필요가없는 것을 주문하려고합니다.
'ThenBy'는 기업의 경우에는 (당신이 언급 한 것처럼) 그리고 쿼리 자체를 수정할 필요가 없기 때문에 가장 좋아합니다. 'ThenBy'는 어쨌든 넥타이를 주문하기 만하면됩니다. –
@DavidSpence 예. 쿼리 분석기의 출력 형식은 무엇입니까? –
죄송합니다. 너무 빨리 입력하십시오. 이것은 두 개의 case 문을 생성하지만 여러분이 말했듯이, 아마도 최적화가있을 것입니다. 나는 그것을 조사 할 것이다. CASE BY ORDER [0]. [이름] NULL NOT IS 다음 [0]. [이름] ELSE [B]. [성]을 END는 CASE 는 [0]. [이름] NULL NOT 때 [이름] ELSE [이름] END –