C# Language
Linq 객체
수색…
소개
LINQ to Objects는 모든 IEnumerable 컬렉션에서 LINQ 쿼리를 사용하는 것을 말합니다.
LINQ to Object가 쿼리를 실행하는 방법
LINQ 쿼리는 즉시 실행되지 않습니다. 쿼리를 작성할 때 향후 실행을 위해 쿼리를 저장하기 만하면됩니다. 실제로 반복문을 요청할 때만 쿼리가 실행됩니다 (예 : for 루프, ToList, Count, Max, Average, First 등을 호출 할 때).
이것은 지연된 실행 으로 간주됩니다. 이렇게하면 여러 단계로 쿼리를 작성하고 조건부 명령문을 기반으로 쿼리를 수정 한 다음 결과가 필요한 경우에만 나중에 실행할 수 있습니다.
주어진 코드 :
var query = from n in numbers
where n % 2 != 0
select n;
위 예제는 질의를 query
변수에 저장한다. 쿼리 자체는 실행하지 않습니다.
foreach
문은 쿼리 실행을 강제 실행합니다.
foreach(var n in query) {
Console.WriteLine($"Number selected {n}");
}
일부 LINQ 메서드는 쿼리 실행, Count
, First
, Max
, Average
도 트리거합니다. 단일 값을 반환합니다. ToList
및 ToArray
는 결과를 수집하여 List 또는 Array로 각각 바꿉니다.
같은 쿼리에서 여러 LINQ 함수를 호출하면 쿼리를 여러 번 반복 할 수 있습니다. 이렇게하면 각 통화마다 다른 결과를 얻을 수 있습니다. 하나의 데이터 세트로 작업하려면 목록 또는 배열에 저장하십시오.
C #에서 개체에 LINQ 사용
Linq에서 간단한 SELECT 쿼리
static void Main(string[] args)
{
string[] cars = { "VW Golf",
"Opel Astra",
"Audi A4",
"Ford Focus",
"Seat Leon",
"VW Passat",
"VW Polo",
"Mercedes C-Class" };
var list = from car in cars
select car;
StringBuilder sb = new StringBuilder();
foreach (string entry in list)
{
sb.Append(entry + "\n");
}
Console.WriteLine(sb.ToString());
Console.ReadLine();
}
위의 예에서 문자열 (자동차)의 배열은 LINQ를 사용하여 쿼리 할 개체의 컬렉션으로 사용됩니다. LINQ 쿼리에서 from 절이 데이터 원본 (자동차)과 범위 변수 (자동차)를 소개하기 위해 먼저옵니다. 쿼리가 실행되면 범위 변수는 자동차의 각 연속 요소에 대한 참조로 사용됩니다. 컴파일러는 자동차 유형을 추론 할 수 있으므로 명시 적으로 지정하지 않아도됩니다.
위의 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.
WHERE 절이있는 SELECT
var list = from car in cars
where car.Contains("VW")
select car;
WHERE 절은 문자열 배열 (자동차)을 쿼리하여 WHERE 절을 만족하는 배열의 하위 집합을 찾아 반환하는 데 사용됩니다.
위의 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.
순서리스트 생성하기
var list = from car in cars
orderby car ascending
select car;
때로는 반환 된 데이터를 정렬하는 것이 유용합니다. orderby 절은 정렬되는 유형에 대한 기본 비교 자에 따라 요소를 정렬하게합니다.
위의 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.
사용자 정의 유형 작업
이 예제에서는 입력 된 목록이 만들어지고 채워진 다음 쿼리됩니다.
public class Car
{
public String Name { get; private set; }
public int UnitsSold { get; private set; }
public Car(string name, int unitsSold)
{
Name = name;
UnitsSold = unitsSold;
}
}
class Program
{
static void Main(string[] args)
{
var car1 = new Car("VW Golf", 270952);
var car2 = new Car("Opel Astra", 56079);
var car3 = new Car("Audi A4", 52493);
var car4 = new Car("Ford Focus", 51677);
var car5 = new Car("Seat Leon", 42125);
var car6 = new Car("VW Passat", 97586);
var car7 = new Car("VW Polo", 69867);
var car8 = new Car("Mercedes C-Class", 67549);
var cars = new List<Car> {
car1, car2, car3, car4, car5, car6, car7, car8 };
var list = from car in cars
select car.Name;
foreach (var entry in list)
{
Console.WriteLine(entry);
}
Console.ReadLine();
}
}
위의 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.
지금까지는 예제가 기본적으로 똑같이 배열을 반복 할 수 있기 때문에 예제가 놀라 울 것 같지 않습니다. 그러나 아래의 몇 가지 예제를 통해 LINQ to Object를 사용하여보다 복잡한 쿼리를 작성하는 방법과 훨씬 적은 코드로 더 많은 것을 얻을 수있는 방법을 확인할 수 있습니다.
아래 예에서 우리는 60000 대 이상 판매 된 자동차를 선택하고 판매 대수에 따라 분류 할 수 있습니다.
var list = from car in cars
where car.UnitsSold > 60000
orderby car.UnitsSold descending
select car;
StringBuilder sb = new StringBuilder();
foreach (var entry in list)
{
sb.AppendLine($"{entry.Name} - {entry.UnitsSold}");
}
Console.WriteLine(sb.ToString());
위의 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.
아래 예제에서 홀수 단위를 판매 한 자동차를 선택하고 이름 위에 알파벳 순으로 정렬 할 수 있습니다.
var list = from car in cars
where car.UnitsSold % 2 != 0
orderby car.Name ascending
select car;
위의 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.