Entity Framework 엔터티의 사용자 지정 확장 속성에 대한 또 다른 질문입니다.Entity Framework의 사용자 지정 엔터티 속성에 의한 정렬
엔티티 모델은 일반적으로 매우 간단합니다. 물론 실제로는 더 복잡하지만 간단히 말해 생성 된 코드, 클래스 및 필요한 속성을 모두 붙여 넣지는 않습니다. 그래서, 나는 엔티티 클래스가 있습니다
partial class Calibration
{
public string Identifier {get;set;}
public Device CalibratedDevice {get;set;}
}
partial class Device
{
public string Name {get;set;}
public ModelGroup ModelGroup {get;set;}
}
partial class ModelGroup
{
public Model[] Models {get;set;}
}
partial class Model
{
public Name {get;set;}
}
을 그리고 난 다른 파일에 추가로 계산 된 속성을 교정 클래스를 확장해야합니다.
string.Join("/", CalibratedDevice.ModelGroup.Models.Select(m => m.Name));
을 마지막으로 나는이 계산 된 속성에 의해 교정 기관의 ObjectSet를 정렬해야합니다
partial class Calibration
{
public string ModelGroupName {get;set;}
}
이 속성은 다음과 같이 계산된다. EF는 데이터베이스에 ModelGroupName 속성을 변환 할 수 없기 때문에 물론 , 코드 같은
Calibrations.OrderBy(c => c.ModelGroupName)
는 예외를 throw 작동하지 않습니다.
이
Calibrations.AsEnumerable().OrderBy(c => c.ModelGroupName)
물론, 그것은 나를 위해없는 일을하지, 내가 데이터 저장에서 모든 개체를로드하고 그들을 정렬하지 않으 : 물론 , 나는 그것을 할 수있는 가장 쉬운 방법을 알고 linq 전체가 작은 조각이 필요하기 때문에 주문한 개체 집합을 주문했습니다.
속성 대신 계산 람다를 저장하고이를 OrderBy 메서드에 전달하는 방법을 알고 있지만 간단한 a + b보다 복잡한 계산 논리가 있기 때문에 작동하지 않습니다. EF는 데이터베이스에 string.Join 방법을 thanslate 수 없기 때문에 예를
partial class Calibration
{
public static Expression<Func<Calibration, string>> ModelGroupName
{
get
{
return c => string.Join("/", c.CalibratedDevice.ModelGroup.Models.Select(m => m.Name));
}
}
}
Calibrations.OrderBy(Calibration.ModelGroupName)
를 들어 예외가 발생합니다. 저는 EF의 첫 번째 버전에서 작업했으며이 성가신 메서드 변환 메커니즘은 재앙이었습니다. 그리고 몇 년 동안의 EF 진화 이후이 문제가 존재하며 적절한 솔루션을 찾을 수 있습니다.
그래서 계산 논리가있는 사용자 지정 속성별로 IQueryable EF 정렬을 구성하는 방법을 SQL에 직접 변환하지 말 것을 제안하십시오. 답장을 보내 주셔서 감사합니다.