2017-01-14 1 views
0

테이블 Fruits이 있고 GetFruitName 메서드를 작성했다고 가정 해 보겠습니다. 과일의 열 FruitNamestring/varchar이며 null 일 수 있습니다. 따라서 FruitName이 null 인 경우 FruitName을 FruitId와 연결된 과일로 반환하기 만하면됩니다.LINQ에서 삼항 연산자를 사용하여 조건부 투영

메소드를 호출 할 때이 오류가 발생합니다. 엔티티

LINQ는 방법 ' 형식 (선택 System.String,은 System.Object)를 선택 System.String'방식을 인식하지 않고,이 방법은 저장 식으로 변환 될 수 .

public class Fruit 
{ 
    public Guid FruitId { get; set; } 
    public string FruitName { get; set; } 
} 

public string GetFruitName(Guid key) 
{ 
    return dbContext.Fruits 
        .Where(fr=> fr.FruitId== key) 
        .Select 
        (
         fr=> 
         fr.FruitName!= null 
          ? fr.FruitName 
          : $"Fruit_{fr.FruitId}" 
        ) 
        .SingleOrDefault(); 
} 

편집 : 우리가 문 경우는 null 검사와 중간 변수를 사용하지 않고이 작업을 수행 할 수 있는지가 궁금 . 쿼리와

public string GetFruitName(Guid key) 
{ 
    var fruit = dbContext.Fruits 
         .SingleOrDefault(fr=> fr.FruitId== key); 

    // Here is your call. I choosed to return an empty string in case of 
    // a fruit not found. You can return also null. 
    var fruitName = string.Empty; 
    if(fruit != null) 
    { 
     // The fruit with the supplied key found. Get it's name. 
     fruitName = fruit.FruitName != null 
         ? fr.FruitName 
         : $"Fruit_{fr.FruitId}"; 
    } 

    return fruitName;        
} 

문제는 삼항 연산자가 아니라 보간 문자열 $"Fruit_{fr.FruitId}" 사용하는 string.Format 방법 :

답변

2

당신은 이런 식으로 뭔가를 시도 할 수 있습니다. 불평 분자는 삽입 된 문자열을 string.Format의 호출로 변환합니다. interploated strings에 관한 더 자세한 정보는 here을보십시오.

null check if 문과 함께 중간 변수를 사용하지 않고이 작업을 수행 할 수 있는지 궁금했습니다.

업데이트

public string GetFruitName(Guid key) 
{ 
    return dbContext.Fruits 
        .SingleOrDefault(fr=> fr.FruitId== key) 
        ?.FruitName ?? $"Fruit_{key}"; 
} 
+0

감사합니다. Christos. 예,이 방법으로 솔루션을 이미 수정했습니다. 그러나 중간 변수가없는 인라인 교정을 기대하고있었습니다. – Ankit

+0

@Ankit 내 업데이트를 참조하십시오. 임시 변수가 없으면 이런 식으로 작성할 수 있다고 생각합니다. – Christos

+0

예, 작동합니다. 또는 정규 문자열 병합을 사용하기도했습니다. – Ankit

1

Apparantly 히, 문자열 보간은 LINQ 쿼리에서 작동하지 않습니다. 나는 정규 문자열 contenation으로 되돌아 갔고 이것은 효과가 있었다.

public string GetFruitName(Guid key) 
    { 
     return dbContext.Fruits 
         .Where(fr=> fr.FruitId== key) 
         .Select 
         (
          fr=> 
          fr.FruitName!= null 
           ? fr.FruitName 
           //changed this line 
           : "Fruit_" + fr.FruitId //or string.Concat("Fruit_", fr.FruitId) 
         ) 
         .SingleOrDefault(); 
    } 
0
public string GetFruitName(Guid key) 
{ 
       var query = dbContext.Fruits 
        .Where(fr => fr.FruitId == key)).ToList() 
       return query.Select 
         (
         fr => 
          fr.FruitName != null 
          ? fr.FruitName 
          : $"Fruit_{fr.FruitId}" 
        ) 
         .SingleOrDefault(); 
} 

이 시도.

관련 문제