2017-12-07 13 views
0

음,이 방법보다 쉽습니다. 문자열 값으로 저장된 금액을 포함하는 테이블이 있습니다. 하지만 내 코드에는 10 진수 값이 필요하며 IQueryable이 작성하는 쿼리의 일부로 십진수로 캐스팅되어야합니다. 따라서 .ToList()를 사용할 수 없습니다. 캐스트는 그 뒤에있는 데이터베이스에 의해 수행되어야합니다.
이 IQueryable은 기본적으로 IQueryables의 체인의 일부이므로 다음 쿼리는이 양에 대한 필터를 추가하여 더 작은 선택을하거나 그 양의 다른 종류의 계산을 수행하려고 할 수 있습니다. 입력되는 쿼리는 이미 모든 데이터의 하위 선택 일 수 있습니다.
편집 : 제가 여기에 있어요 설명해 보자 내가 작성하는이 방법 같은 것을 가지고IQueryable 내에서 문자열을 십진수로 변환하는 방법

public static IQueryable<PriceList> GetPriceList(this IQueryable<PriceData> query) => query.Select(d => new PriceList{Name = d.Item.Name, Price = decimal.Parse(d.Value)}).AsQueryable(); 

을 그리고 PriceData 몇 필드와 문자열 값으로 가격를 포함하는 기록이다. 그러나 PriceList 레코드에는 10 진수가 필요합니다.
이 방법은 다른 선택 방법, 수학 등을 위해 다른 확장 방법에서 사용될 수 있습니다. Decimal.parse 및 다른 옵션이 IQueryable 내에서 작동하지 않는다는 것입니다 ...

+1

AsIQueryable()'? –

+0

내가 할 수만 있다면 그래. 하지만. 저는 입력으로 IQueryable을 얻었고 더 큰 표현 트리의 일부이므로 IQueryable을 출력으로 쫓아 내야합니다 ... –

+1

왜 첫 번째 인스턴스의 가격이 문자열입니까? 이것은 틀린 것처럼 보인다. (그리고 아마도 Money, Decimal이어야합니다). 즉, 아마 * https://stackoverflow.com/questions/12118258/int-parse-in-linq-expression –

답변

1

이미 설명했듯이 지원되지 않습니다.

  • 가장 좋은 방법은 actualy 무엇을 나타내는 지에 데이터베이스 필드 유형을 변경하는 것입니다 : 가능하지 않은 경우,/돈
  • 진수 것을 가능하게 할 수있는 능력이있는 사람, 이야기
가능하지 않은 경우

, 내가 상상할 수있는 가장 가까운 해결 방법은 : 다음

public class PriceList 
{ 
    public string Price { get; set; } 
    public decimal ParsedPrice => decimal.Parse(Price); 
} 

그리고 :

.Select(d=>new PriceList 
{ 
    Price = d.Price 
}); 

그러나 ParsedPrice에서 DbOperations를 실행할 수는 없습니다. 또한 EF6에서는 매개 변수가있는 생성자를 사용할 수 없습니다. 그것은 당신이 만날 다음 문제가 될 것입니다.

EF는 CRUD에 가장 적합합니다. 모든 것을 더 필요로하는 것은 아마도 당신이 필요로하는 데이터를 가져와 구체화하고 DTO 나 BusinessObjectger를 만드는 서비스를 가져야 할 것입니다. 그런

뭔가 :.

어떻게`dbContext.someTable.SqlQuery는 ("someTable 변환 (양, DECIMAL)를 선택")에 대한
public class MyService 
{ 
    public IEnumerable<PriceList> GetPriceList(Expression<Func<MyEntity, bool>> predicate) 
    { 
     var data = _context.MyEntity.Where(predicate).ToList(); 
     foreach (var item in data) 
     { 
      var dto = new PriceList {...} 
      yield return dto; 
     }   
    } 
} 
+0

EF에는 숫자 값을 문자열로 변환 할 수있는 SqlFunctions 정적 클래스가 있으므로 성가신 것은 아닙니다. 그렇다면 왜 다른 방향으로 변환 할 비슷한 것들이 없습니까? 나는 문자열 - 숫자를 나열하지 않는 https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/ef/language-reference/clr-method-to-canonical-function-mapping을 찾았습니다. 전환이 가능해 보이지 않습니다. 지금은 ... –

+1

아마도 모든 int는 문자열 일 수 있기 때문에 모든 문자열이 int가 될 수는 없습니다. 그러나 저는 어떤 가정도하고 싶지 않습니다. 나는 100 % 확실하지 않습니다. –

+0

사실, 변환에 실패하면 NAN을 결과로 반환 할 수 있습니다. 또는 많은 데이터베이스가 예외를 반환하는 것처럼 쉽게 예외를 반환합니다. 그러나 DBFunctions와 SqlFunctions 모두 C# 함수를 해당 SQL 함수에 매핑 할 수 있어야한다고 제안하는 것 같습니다. 그런 다음 문자열을 숫자로 변환해야하는 필요성이 디자인 결함으로 간주되는 경향이 있습니다. 하나는 현재 시스템에서 해결할 수 없습니다. –