Linq - selectDistinct 연산 자
27388 단어 distinct
적용 장면: o (∩ ∩) o... 조회 하 죠.
설명: SQL 명령 의 select 역할 과 비슷 하지만 위치 가 다 릅 니 다. 검색 표현 식 의 select 및 연결 자 구 는 표현 식 마지막 에 놓 고 자구 의 변 수 를 결과 로 되 돌려 줍 니 다.지연
select / Distinct 작업 은 9 가지 형식 을 포함 하 는데 그것 이 바로 간단 한 용법, 익명 유형 형식, 조건 형식, 지정 유형 형식, 선별 형식, 성형 유형 형식, 내장 유형 형식, 로 컬 방법 호출 형식, Distinct 형식 이다.
1. 간단 한 용법:
이 예 는 고객 연락처 이름 만 포함 하 는 순 서 를 되 돌려 줍 니 다.
var q =
from c in db.Customers
select c.ContactName;
메모: 이 문 구 는 하나의 성명 이나 설명 일 뿐 데 이 터 를 진정 으로 꺼 내지 않 았 습 니 다. 이 데이터 가 필요 할 때 만 이 문 구 를 실행 할 수 있 습 니 다. 이것 이 바로 로드 지연 (deferred loading) 입 니 다.성명 할 때 돌아 오 는 결과 집 은 대상 의 집합 이다.ToList () 나 ToArray () 방법 으로 검색 결 과 를 먼저 저장 한 다음 에 이 집합 을 조회 할 수 있 습 니 다.물론 로드 지연 (deferred loading) 은 SQL 문 구 를 맞 추 는 것 처럼 문법 을 맞 추고 실행 할 수 있 습 니 다.
2. 익명 형식:
설명: 익명 형식 은 C \ # 3.0 의 새로운 기능 입 니 다.실질 적 으로 컴 파일 러 는 사용자 정의 에 따라 익명 의 클래스 를 자동 으로 만들어 임시 변 수 를 저장 하 는 데 도움 을 주 는 것 이다.익명 형식 은 property 에 따라 대상 을 만 드 는 것 을 지원 합 니 다.예 를 들 어 var d = new {Name = "s"};컴 파 일 러 는 property Name 이라는 익명 클래스 를 자동 으로 생 성하 고 이 형식 에 따라 메모 리 를 할당 하 며 대상 을 초기 화 합 니 다.그러나 var d = new {"s"};컴 파일 이 통과 되 지 않 았 습 니 다.컴 파일 러 는 익명 류 의 property 이름 을 모 르 기 때문이다.예 를 들 어 string c = "d";var d = new { c}; 컴 파일 을 통 해컴 파 일 러 는 익명 클래스 라 는 c 라 는 property 를 만 들 것 입 니 다.예 를 들 어 다음 예: new {c, ContactName, c. Phone};ContactName 과 Phone 은 맵 파일 에서 표 의 필드 와 대응 하 는 property 를 정의 합 니 다.컴 파 일 러 가 데 이 터 를 읽 고 대상 을 만 들 때 익명 클래스 를 만 듭 니 다. 이 클래스 는 두 개의 속성 이 있 습 니 다. ContactName 과 Phone 이 고 데이터 에 따라 대상 을 초기 화 합 니 다.또한 컴 파일 러 는 property 의 이름 도 바 꿀 수 있다.
var q =
from c in db.Customers
select new {c.ContactName, c.Phone};
위의 설명: SELECT 와 익명 형식 을 사용 하여 고객 연락처 이름과 전화번호 만 포함 하 는 순 서 를 되 돌려 줍 니 다.
var q =
from e in db.Employees
select new
{
Name = e.FirstName + " " + e.LastName,
Phone = e.HomePhone
};
위의 설명: SELECT 와 익명 형식 을 사용 하여 직원 이름과 전화번호 만 포 함 된 순 서 를 되 돌려 주 고 FirstName 과 LastName 필드 를 필드 "Name" 으로 합 칩 니 다. 또한 얻 은 시퀀스 에서 HomePhone 필드 를 Phone 으로 이름 을 바 꿉 니 다.
var q =
from p in db.Products
select new
{
p.ProductID,
HalfPrice = p.UnitPrice / 2
};
위의 설명: SELECT 와 익명 형식 을 사용 하여 모든 제품 의 ID 와 HalfPrice (제품 단가 나 누 기 2 소득 의 값 으로 설정) 의 순 서 를 되 돌려 줍 니 다.
3. 조건 형식:
설명: SQL 문 구 를 생 성 하 는 것 은: case when condition then else 입 니 다.
var q =
from p in db.Products
select new
{
p.ProductName,
Availability =
p.UnitsInStock - p.UnitsOnOrder < 0 ?
"Out Of Stock" : "In Stock"
};
위의 설명: SELECT 와 조건 문 구 를 사용 하여 제품 이름과 제품 납품 상태의 순 서 를 되 돌려 줍 니 다.
4. 형식 지정:
설명: 이 형식 은 사용자 정의 형식의 대상 집합 을 되 돌려 줍 니 다.
var q =
from e in db.Employees
select new Name
{
FirstName = e.FirstName,
LastName = e.LastName
};
위의 설명: SELECT 와 알려 진 형식 을 사용 하여 직원 의 이름 을 되 돌려 주 는 순서 입 니 다.
5. 필터 형식:
설명: where 와 결합 하여 사용 하면 여과 작용 을 한다.
var q =
from c in db.Customers
where c.City == "
London
"
select c.ContactName;
위의 설명: SELECT 와 WHERE 를 사용 하여 런던 고객 연락처 의 이름 만 포함 하 는 순 서 를 되 돌려 줍 니 다.
6. shaped 형식 (성형 유형):
설명: select 작업 은 익명 의 대상 을 사 용 했 고 이 익명 의 대상 에서 그 속성 도 익명 의 대상 이다.
var q =
from c in db.Customers
select new {
c.CustomerID,
CompanyInfo = new {c.CompanyName, c.City, c.Country},
ContactInfo = new {c.ContactName, c.ContactTitle}
};
문장 설명: SELECT 와 익명 형식 을 사용 하여 고객 의 데이터 에 대한 성형 부분 집합 을 되 돌려 줍 니 다.고객 의 ID 와 회사 정보 (회사 명, 도시, 국가) 및 연락 정보 (연락처 와 직위) 를 조회 합 니 다.
7. 끼 워 넣 기 형식:
설명: 되 돌아 오 는 대상 이 집 중 된 모든 대상 Discounted Products 속성 에는 또 하나의 집합 이 포함 되 어 있 습 니 다.즉, 모든 대상 도 하나의 집합 류 이다.
var q =
from o in db.Orders
select new {
o.OrderID,
DiscountedProducts =
from od in o.OrderDetails
where od.Discount > 0.0
select od,
FreeShippingDiscount = o.Freight
};
문장 설명: 모든 주문서 와 OrderID 의 시퀀스, 할인 주문서 에 있 는 항목 의 하위 시퀀스 와 배달 면제 금액 을 조회 하여 되 돌려 줍 니 다.
8. 로 컬 방법 호출 형식 (LocalMethodCall):
이 예 는 검색 에서 로 컬 방법 인 Phone NumberConverter 를 호출 하여 전화 번 호 를 국제 형식 으로 변환 합 니 다.
var q = from c in db.Customers
where c.Country == "
UK
" || c.Country == "
USA
"
select new
{
c.CustomerID,
c.CompanyName,
Phone = c.Phone,
InternationalPhone =
PhoneNumberConverter(c.Country, c.Phone)
};
PhoneNumberConverter 방법 은 다음 과 같 습 니 다.
public string PhoneNumberConverter(string Country, string Phone)
{
Phone = Phone.Replace(" ", "").Replace(")", ")-");
switch (Country)
{
case "
USA
":
return "1-" + Phone;
case "
UK
":
return "44-" + Phone;
default:
return Phone;
}
}
다음은 이 방법 을 사용 하여 전화 번 호 를 국제 형식 으로 바 꾸 고 XDocument 를 만 듭 니 다.
XDocument doc = new XDocument(
new XElement("Customers", from c in db.Customers
where c.Country == "
UK
" || c.Country == "
USA
"
select (new XElement("Customer",
new XAttribute("CustomerID", c.CustomerID),
new XAttribute("CompanyName", c.CompanyName),
new XAttribute("InterationalPhone",
PhoneNumberConverter(c.Country, c.Phone))
))));
9. Distinct 형식:
설명: 필터 필드 의 다른 값 입 니 다.중복 되 지 않 는 결과 집합 을 조회 하 는 데 사용 합 니 다.SQL 문장 생 성: SELECT DISTINCT [city] FROM [Customers]
var q = (
from c in db.Customers
select c.City )
.Distinct();
문장 설명: 고객 이 덮 인 국 가 를 조회 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
elasticsearch 집합 함수로distinct 조회 실현자세히 보기 1. 등가의 sql 등가 2. Group by 쿼리는 es에서 Aggregation (집합) 으로 구현할 수 있습니다. 등가의 DSL 쿼리 문장은 다음과 같습니다. 3.java의 실현: 4.문제점: a....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.