SQL에서 C#으로 람다로 다음 쿼리를 다시 작성하려면 어떻게해야합니까? 람다를 쓰는 것이 좋습니다?C에서 SQL을 람다로 변환
SELECT *
FROM Claims
WHERE id IN (SELECT claimId
FROM MissingItems
GROUP BY claimId);
SQL에서 C#으로 람다로 다음 쿼리를 다시 작성하려면 어떻게해야합니까? 람다를 쓰는 것이 좋습니다?C에서 SQL을 람다로 변환
SELECT *
FROM Claims
WHERE id IN (SELECT claimId
FROM MissingItems
GROUP BY claimId);
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()
그래서 저는 아직도 그것을 별도로해야합니다. lamda를 사용하면 어떤 이점이 있습니까? – user1828605
별 의미가 확실하지 않습니다. 문제를 해결하기위한 다른 LINQ/λ 방법이 있습니다. 람다의 주된 장점은 C#에서 SQL 문자열/저장 프로 시저를 호출 할 필요가 없다는 것입니다. 대신, 당신은 정기적 인 수집 방법을 사용할 수 있습니다. 일반적으로 C# 코드베이스에있을 때보다 읽기 쉽고 편리합니다. – mmcrae
알기. 고맙습니다. 제가 개별적으로 말했을 때, 저는 두 가지 별도의 문장을 쓰는 것을 의미했습니다. 먼저 ID 목록을 가져오고 목록을 사용하여 목록을 가져옵니다. 나는 한 가지 진술로 그것을 할 수있는 방법이 있다고 생각했다. 하지만 지금은 이해합니다. 고맙습니다. – user1828605
당신은 하나의 "라인"에서이 작업을 수행하기 위해 가입 사용할 수 있습니다
이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에 참여합니다. 결과는 다음과 같습니다.
왜 투표가 중단 되었습니까? 간단한 질문을하는 것이 잘못 되었습니까? – user1828605
나는 downvote하지 않았지만 어쩌면 당신이 당신의 노력을 보여주지 않았기 때문입니다. (일명 "[당신은 무엇을 시도 했습니까?] (http://meta.stackexchange.com/questions/172758/what-have-you- 시도 - 전염병) "). –
아마 당신은 당신의 끝에서 어떤 노력도 보이지 않고 당신이 전환을 요구하고 있기 때문에 downvoted입니다. – Rahul