2014-12-18 2 views
1

Linq 쿼리가 있는데 목록에 레코드가 존재하는지 여부에 따라 select 절에 값이 있어야합니다.LINQ select 절의 내부에 C#이있는 경우

var records = (from il in itemList 
     join ci in catalogueItemList on il.CatalogueItemID equals ci.CatalogueItemID 
     join pd in publicationDataList on il.CatalogueItemID equals pd.CatalogueItemID 
     select new { il.ItemID, pd.ISBN, ci.Title, ci.CatalogueItemID, il.LocationID, il.Missing, }).ToList(); 

나는 사전 itemCheckoutDictionary라는 가지고, 나는 의사 코드에 원하는 것입니다 : 여기 내 쿼리는

내 선택 절에, 나는이 작업을 수행하는 방법을 잘 아니에요 필요
if (itemCheckDictionary.ContainsKey(i.itemID)) then "Checked Out" else "In" 

.

+0

이을이다, 엔티티, 개체, SQL에 linq? –

답변

1
나는 종종 작은 도우미 기능을 사용하여 작업을 수행하는 것을 선호

:

LINQ
var getStatus = new Func<int, string>(itemID => { 
    return itemCheckDictionary.ContainsKey(itemID) ? "Checked Out" : "In"; 
}); 

var records = (from il in itemList 
    join ci in catalogueItemList on il.CatalogueItemID equals ci.CatalogueItemID 
    join pd in publicationDataList on il.CatalogueItemID equals pd.CatalogueItemID 
    select new { 
     // other properties 
     Status = getStatus(i.ItemID) }).ToList(); 
+0

우수함, 정확하게 감사드립니다! ! – mgrenier

9

ternary operator을 사용해 보셨습니까?

string s = itemCheckDictionary.ContainsKey(i.itemID) ? "Checked Out" : "In"; 
+5

귀하의 링크에서 : _ "조건부 연산자는 일반적으로 (비록 ** 틀리 **) 삼항 연산자"_;) –

+0

@ TimSchmelter라고 불리는데, 까다로운 점은 Microsoft가 자체적으로 오래된 용어 인 Ternary를 사용했다는 것입니다 * 설명서, [조건부 (삼항) 연산자 (? :)] (http://msdn.microsoft.com/en-us/library/zakwfxx4%28v=90.aspx) – Habib

+1

@TimSchmelter 참조하는 것으로 보입니다. 많은 다른 삼항 연산자들에 대해서, 그리고 조건부 만이 삼자 연산자가 될 것입니다. "삼항"이 조건 연산자에 대한 잘못된 용어라고는하지 않습니다. 알렉 스는 그것을 "삼항 연산자"로 언급하지 않습니다. – Default

1

당신은 당신이 사용할 수 있으며,이 경우 필요가 없습니다

itemCheckDictionary.ContainsKey(i.itemID) ? "Checked Out" : "In" 
+0

select 절에이 단어가 필요합니다. select 절에 넣을 수는 없습니다. – mgrenier