2017-12-12 3 views
0

아래와 같이 C# 프로젝트에서 LINQ 쿼리를 작성하지만 컴파일러에서 계산 필드 '사용 가능'을 좋아하지 않습니다.C# LINQ 선택 절의 계산 된 필드 및 하위 쿼리

형식이 다르므로 (a.Qtty * a.Price)와 하위 쿼리를 비교할 수 없다고 말합니다. 첫 번째는 double이고 두 번째는 익명 형식입니다.

모든 종류의 캐스트를 시도했지만 작동하지 않았습니다.

더 간단하게하기 위해 where 절을 제거했으며 optionTypes는 enum입니다.

계산 된 값과 하위 쿼리 비교를 제거하면 정상적으로 작동합니다.

어떤 도움이 필요합니까? 익명 유형을 생성하지만, 단지 값을 선택하지 마십시오

(a.Qtty * a.Price) 
<= 
_ctx.Items.Where().Select(b => new { b.Qtty }).FirstOrDefault() 

는이 문제를 해결하려면 :

dynamic fromOthers = _ctx.Orders 
    .Where(/* conditions */) 
    .Select(a => new 
    { 
     Id = a.Id, 
     Option = a.OpType == OptionTypes.Buy ? "Buy" : "Sell", 
     Enabled = 
     (a.OpType == OptionTypes.Buy 
      ? (a.Qtty * a.Price) <= 
      _ctx.Items 
       .Where(/* conditions */) 
       .Select(b => new 
       { 
        b.Qtty 
       }) 
       .FirstOrDefault() ? "Yes" : "No" 
      : "TBD" 
     ) 
     }) 
    .ToList(); 
+0

'a'의 정의가 표시 될 수 있습니다. –

+0

죄송합니다. 나는 당신의 질문을 이해하지 못했습니다. –

+1

'new {b.Qtty}'를 숫자 값과 비교하고 있습니다. 익명의 타입으로 포장하지 않고'b.Qtty'를 선택하기 만하면됩니다. –

답변

0

당신은 익명의 유형 (나는 decimal 추측) 숫자 값을 비교
(a.Qtty * a.Price) 
<= 
_ctx.Items.Where().Select(b => b.Qtty).FirstOrDefault()