수색…


소개

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 도 트리거합니다. 단일 값을 반환합니다. ToListToArray 는 결과를 수집하여 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;

위의 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다. 여기에 이미지 설명을 입력하십시오.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow