2016-08-09 2 views
0

SQL에서 C#으로 람다로 다음 쿼리를 다시 작성하려면 어떻게해야합니까? 람다를 쓰는 것이 좋습니다?C에서 SQL을 람다로 변환

SELECT * 
FROM Claims 
WHERE id IN (SELECT claimId 
      FROM MissingItems 
      GROUP BY claimId); 
+0

왜 투표가 중단 되었습니까? 간단한 질문을하는 것이 잘못 되었습니까? – user1828605

+2

나는 downvote하지 않았지만 어쩌면 당신이 당신의 노력을 보여주지 않았기 때문입니다. (일명 "[당신은 무엇을 시도 했습니까?] (http://meta.stackexchange.com/questions/172758/what-have-you- 시도 - 전염병) "). –

+2

아마 당신은 당신의 끝에서 어떤 노력도 보이지 않고 당신이 전환을 요구하고 있기 때문에 downvoted입니다. – Rahul

답변

3

LINQ의 람다를 사용하여 등가 - 당신이 당신의 "하나 코드 (그리고 코드에서 주장의 표현)

List<String> distinctClaimIds = missingItems.Select(mi => mi.claimId).Distinct(); 

List<Claim> claimsWithThoseIds = claims.Where(c => distinctClaimIds.Contains(c.id)).ToList(); 

편집에 MissingItem 개체의 컬렉션을 가지고 가정 성명서 "관심사 :

내가"2가 더 읽기 쉽다 "고해도"하나의 진술 "에 가장 가깝습니다.

List<Claim> claimsWithThoseIds = claims.Where(c => missingItems.Select(mi => mi.claimId).Distinct().Contains(c.id)).ToList() 
+0

그래서 저는 아직도 그것을 별도로해야합니다. lamda를 사용하면 어떤 이점이 있습니까? – user1828605

+0

별 의미가 확실하지 않습니다. 문제를 해결하기위한 다른 LINQ/λ 방법이 있습니다. 람다의 주된 장점은 C#에서 SQL 문자열/저장 프로 시저를 호출 할 필요가 없다는 것입니다. 대신, 당신은 정기적 인 수집 ​​방법을 사용할 수 있습니다. 일반적으로 C# 코드베이스에있을 때보다 읽기 쉽고 편리합니다. – mmcrae

+0

알기. 고맙습니다. 제가 개별적으로 말했을 때, 저는 두 가지 별도의 문장을 쓰는 것을 의미했습니다. 먼저 ID 목록을 가져오고 목록을 사용하여 목록을 가져옵니다. 나는 한 가지 진술로 그것을 할 수있는 방법이 있다고 생각했다. 하지만 지금은 이해합니다. 고맙습니다. – user1828605

0

당신은 하나의 "라인"에서이 작업을 수행하기 위해 가입 사용할 수 있습니다

class MissingItems 
{ 
    public string Id {get;set;} 
} 
class Claims 
{ 
    public string ClaimId {get;set;} 
} 

void Main() 
{ 
    List<MissingItems> mi = new List<MissingItems>() { 
     new MissingItems() {Id = "a"}, 
     new MissingItems() {Id = "b"}, 
     new MissingItems() {Id = "c"}, 
     new MissingItems() {Id = "d"}, 
    }; 
    List<Claims> cl = new List<Claims>() { 
     new Claims() {ClaimId = "a"}, 
     new Claims() {ClaimId = "f"}, 
     new Claims() {ClaimId = "c"}, 
     new Claims() {ClaimId = "d"}, 
    }; 

    var a = mi.Join(cl, m => m.Id, c => c.ClaimId, (m,c) => {  
     return new { Claim = c.ClaimId, Missing = m.Id}; 
    }); 
    foreach(var b in a) 
    { 
     Console.WriteLine("Claim: " + b.Claim + " Missing: " + b.Missing); 
    } 
} 

이것은 MissingItems Id 속성에 대한 주장에서 ClaimId에 참여합니다. 결과는 다음과 같습니다.