2010-02-14 6 views
2

개체에 대한 Linq이 소개 된 지 얼마되지 않아 개발자들 사이에서 채택되고 있는지 궁금합니다. 필자의 경험에 비추어 볼 때 필자가 필터링, 정렬 및 그룹화 기능을 사용하는 코드를 많이 보았다고 말할 수는 없습니다. 너와 똑같은가?Linq는 얼마나 널리 사용되고 있습니까?

개발자가 실제로 프로그래밍 방식을 찾으면 기존 루프보다 more concise and readable이 가능합니까?

답변

2

나는 요즘 거의 모든 일에 LINQ를 사용합니다. 어떤 열거 형을 쿼리 할 수있는 능력은 특히 LINQ, IEnumerable <T> 및 IQueryable <T>과 같은 방법을 고려할 때 매우 강력합니다. LINQ의 표현 적 성격은 이해하기 쉬울뿐만 아니라 절대적으로 필요한 때까지 실행을 지연하여 응용 프로그램의 효율성을 크게 향상시키고 불필요하게 임시 컬렉션을 만들고 데이터를 복사하지 않고도 처리해야하는 데이터 만 정확하게 처리 할 수 ​​있습니다.

기본 IEnumerable 및 IQueryable 이외에도 LINQ는 System.Linq.Expressions 네임 스페이스를 도입했습니다.자신의 유형과 메소드에서 표현식을 활용함으로써 링크의 이점을 자신의 API에 삽입 할 수 있습니다. C# 및 .NET의 많은 기능에는 실제 런타임 유형을 나타내는 문자열이 필요할 수 있습니다. 반사는 가장 주목할 만하지만 다른 많은 경우가 있습니다. 표현식을 사용하면 컴파일 타임 검사가 불가능한 문자열 데이터가 무엇인지에 대한 컴파일 타임 검사를 추가 할 수 있습니다. 이것은 아마도 LINQ가 테이블에 가져다 준 가장 강력한 기능 중 하나이며, 기회가 생길 때마다 사용하려고하는 기능 중 하나입니다. 나는 많은 사람들이 내가 설계 한 API 중 일부에서 LINQ 또는 LINQ 관련 것들을 사용하고 있다는 것을 알고 있는지 확신하지 못한다.

LINQ와 그 친척 인 표현식과 람다 (lambda)와 같은 기능은 많은 .NET 개발자들이 사용하는 것 이상으로 사용됩니다. 많은 개발자들이 LINQ를 싫어하는 것과 Where() 또는 Select() 메서드와 같은 기능을 동시에 사용하는 방법에 대해 언급했습니다. LINQ가 오해가 심하고 LINQ to SQL과 주로 관련되어있을 수 있습니다 ... 그러나 LINQ는 단순한 기본 ORM 프레임 워크 이상입니다. 이것은 C# 3.0의보다 강력하고 고유 한 기능 중 하나이며, 많이 사용되지 않으면 실제로 있어야합니다.

+0

LINQ가 실행을 지연하여보다 효율적으로 수행한다는 간단한 예를 제공 할 수 있습니까? –

+0

호출 체인이 있다고 가정하고, 각 호출은 데이터베이스의 데이터가 들어있는 제공된 모음을 수정합니다. 고전적으로 큰 데이터 세트를 선택하고 컬렉션을 검색하고, 발견 된 항목을 새 컬렉션에 추가하고, 반환하는 등의 데이터 세트를 점진적으로 축소 할 수 있습니다. 문제는 데이터베이스를 처음에 쿼리하고 각각에서 스테이지를 사용하여 큰 결과 집합을 필터링합니다. LINQ를 사용하면 실제로 데이터 집합을 필터링하지 않고 ... 필요한 모든 조건을 추가 할 때까지 초기 쿼리를 수정하기 만하면 데이터베이스에 대해 실행됩니다. – jrista

+0

기본 접근 방식과 LINQ 접근 방식의 차이는 고전적으로 필요한 것보다 많은 데이터를 검색하고 점진적으로 축소하는 것입니다. LINQ와 마찬가지로 일반 쿼리로 시작하여 실제로 필요할 때만 데이터를 요청하여 점진적으로 구체화합니다. 데이터베이스에 대해 bazillion 특정 저장 프로 시저를 작성하여 각 특정 시나리오에 필요한 것만 정확하게 반환 할 수는 있지만 확인 및 유지 관리해야하는 전체 코드 계층을 추가로 만들 수 있습니다. LINQ 방식을 사용하면 해당 작업을 제거 할 수 있습니다. – jrista

0

IMHO, 매우 유용하다는 것을 알았고 컬렉션, XML 또는 데이터베이스를 쿼리해야 할 때마다 사용합니다. SQL과 상당히 유사한 기능과 질의 기능을 가진 기능 스타일 쿼리 언어를 사용하여 객체를 쿼리하는 기능을 쉽게 사용할 수 있다는 장점이있어 SQL에 익숙해지면 쉽게 배울 수 있습니다. .

나는이 튜토리얼에 대해 많은 자습서를 보았으며이 포럼에서 많은 질문을 보았습니다. 그래서 자주 사용되는 것 같습니다. LINQ가 객체 지향 코드에 하드 코딩 된 문자열을 작성해야하기 전에 특히 데이터베이스와 같이 객체 지향 방식으로 사용할 수있는 장점이 있습니다.

잘 사용하면 좋은 기술입니다!

2

필자는 개인적으로 대부분의 작업에서 정규 루프보다 오브젝트에 LINQ를 선호하며 내가 볼 수있는 코드베이스를 보면 그 중 하나만은 아님을 알 수 있습니다. 그러나 저는 LINQ를 자주 사용하지 않는 사람들이 많이 있다고 확신합니다.

내가 LINQ를 알게 된 주된 이유는 PLINQ를 사용할 수 있기 때문입니다. 전통적인 루프를 사용하는 경우 오늘날의 멀티 코어 시스템을 직접 활용하려면 모든 배관 작업을 수행해야합니다. PLINQ를 사용하면 거의 처리하지 않아도됩니다. 쿼리를 병렬로 표시하면 라이브러리는 사용 가능한 코어에서 작업 부하를 분할하려고 시도합니다.

+0

예, 3.0과 호환되는 상태에서 머물러야 할 때 예를 들었습니다. 빠른 장소 또는 선택 영역에 놓을 수 없습니다. 지금은 거의 근육 기억입니다. – itowlson

2

실제 프로덕션 코드에서 사용 된 예가 많이 있습니다. 나는 많은 사람들이 LINQ와 LINQ to SQL의 차이점으로 여전히 혼란 스럽다고 생각합니다. 나는 현실 세계에서 SQL에 대한 LINQ가별로 보이지 않는다. 사람들은 다른 시스템을 사용한다. 그러나 그렇습니다. 인라인 LINQ 스 니펫은 어디 에나 있습니다. LINQ는 우리의 6의 새로운 부분에 흩어져있다

var paramlist = String.Join(",", updatelist.Keys.Select(x => "@" + x).ToArray()) + ",@DateEntered";

+0

내 경험이 귀하의 의견에 동의합니다. 그래도 가장 일반적인 비꼬아 보이는 단편을 자신의 방식으로 마무리하고 싶습니다. LINQ에 익숙하지 않은 개발자가 그것을 본다면 "WTF"가 될 것이라고 생각합니다. –

1

: 여기

는 @parameters의 쉼표로 구분 된 문자열로 사전의 키에 합류, 모든 곳에서 찾을 수있는 무언가의 예 ish 세 응용 프로그램입니다. 현대적인 .NET 프레임 워크를 사용하는 경우 "사용하는 것"이 ​​어렵지 않습니다. 물론, 내 팀의 다른 개발자들은 아직 실제로 사용하지 않고 있지만 익숙하지 않을 수 있습니다.

System.LINQ의 확장 메서드는 실제로 일반적인 프로그래밍 작업의 큰 클래스를 정리하고 간소화하는 데 도움이됩니다. 그들은 너무 사용하기 쉽지 않습니다.

2

나는 또한 매일 사용하며 예상 한 것보다 훨씬 많습니다. (덧글에 대한 필요없이) LINQ와

// check if all are eligible for free shipping  
bool all = true; 
for (int i = 0; i < products.Count; ++products) 
{ 
    if (!products[i].FreeShipping) 
    { 
      all = false; 
    } 
} 

if (all) return; 

당신이 쓰기 : 일반적으로 같은 쿼리 것들에 대한 프로그램 루프에 대한 우아 많이있다 Linq에없이

if (products.All(p => p.FreeShipping)) 
    return; 

는, 모든 디바이스는 자신이있다 이 루프를 작성하는 스타일. 게다가 많은 비슷한 테스트를 작성하면 같은 for 루프에서 여러 값을 계산하여 "최적화"하려는 유혹을 불러 일으켜 코드를 더 어렵게 만듭니다.

항상 "가장 짧은 읽을 수있는 프로그램"을 쓰는 것이 내 개인적인 목표에 잘 어울립니다.

+0

좋은 예가 있지만 Linq 유용성에 대해 확신 할 필요는 없습니다. 실제로 그것을 학대 할 때까지 좋아합니다. 측근들이 사람들이 그것을 사용하고 실제로 사용하기가 더 쉬운 지 알고 싶습니다. –

+0

그들은 그것을 사용합니다. 개발자 중 단 한 명만 흥미가 없었지만, 그렇지 않으면 신선한 사람과 노련한 사람 모두 몇 가지 사례를 본 후 빠르게 받아들입니다. 이 예제의 요점은 그것이 일종의 자체 판매라는 것입니다. 우리는 대부분 Linq를 객체로 사용하고 있으며 일반적으로 sql과 같은 구문이 아닌 확장 메소드를 사용합니다. –