Linq를 사용하여 객체 중 하나를 선택하고 싶은데 요소 중 하나가 숫자이고 즉석에서 문자열로 서식을 지정하려고합니다. 다른 열의 일부 데이터를 포함하여 특정 설명 텍스트를 만들려고합니다. 선택 문장을 보면 2 자리 소수점을 사용하여 문자열을 Currency로 포맷하려고합니다. 작동하지 않습니다. 이 작업을 어떻게 올바르게 수행해야합니까?Linq를 사용하여 형식화 된 문자열로 객체 선택
var stuff = from obj in _dbc.Stuff
where
SqlMethods.Like(obj.SEGMENT2, "0023") &&
SqlMethods.Like(obj.SEGMENT4, "1243")
group obj by new
{
obj.SEGMENT1
}
into g
select new StuffObject
{
Item = g.Key.SEGMENT1,
Description =
string.Format("{0:C2}", g.Sum(p => p.VALUE == null ? 0 : p.VALUE.Value)) //<-- This is not working for me
+ "<br/>" + g.Min(p => p.DESCRIPTION),
DeCode = g.Min(p => p.SEGMENT2),
CeCode = g.Min(p => p.SEGMENT4),
QTY = g.Sum(p => p.QUANTITY == null ? 0 : (int)p.QUANTITY),
Cost = g.Sum(p => p.VALUE == null ? 0 : (double)p.VALUE)
};
, BTW 오류 코드 미안의 receiveing은 다음과 같습니다 System.InvalidOperationException: Could not translate expression .... abbreviated ...into SQL and could not treat it as a local expression.
는 (I 시도 haven't 아직 대답 @Grundy) 지금처럼 내 StuffObject 클래스 :
public class StuffObject
{
public string Item { get; set; }
public string Description { get; set; }
public string DeCode { get; set;}
public string CeCode { get; set; }
public int QTY{ get; set; }
public double Cost { get; set; }
}
같은 LINQ 쿼리를 변경할 수 있습니다 혼자가 뭘 잘못했는지에 대한 단서를 제공하지 않습니다 "작동하지 않는" **. 즉, DB에 'NULL'값이 있다고 가정합니다. 이 경우'null'과 비교할 필요없이'DBNull.Value'와 비교할 수 있습니다 :'g.sum (p => p.VALUE! = DBNull.Value? 0 : p.VALUE.Value))' –
샘플에서 불필요한 코드를 모두 제거 할 수 있습니까? 불필요한 코드를 제거하면 더 쉽게 집중할 수 있으며 대답을 밝힐 수도 있습니다. – wizulus
DBNull 문제는 아닙니다. 그렇지 않으면 p.VALUE.Value가 실패합니다. p.VALUE는 분명히 nullable 프리미티브입니다. – wizulus