으로 일반적인 속성을 설정하는 방법은 다음과 같이 여러 쿼리가 있습니다 LINQ 선택
var query = from a in EntityAs
select new EntityASmall()
{
// Common Stuff:
Id = a.Id,
Name = a.Name,
ShortName = a.ShortName,
// Specific to EntityA:
ASpecificProperty1 = a.1,
ASpecificProperty2 = a.2
};
var query = from b in EntityBs
select new EntityBSmall()
{
// Common Stuff:
Id = b.Id,
Name = b.Name,
ShortName = b.ShortName,
// Specific to EntityB:
BSpecificProperty1 = b.1,
BSpecificProperty2 = b.2
};
EntityA 및 EntityB 모두
Id
,
Name
및
ShortName
속성이 공통 기본 클래스에서 파생됩니다.
EntityASmall
및
EntityBSmall
에 대해서도 동일합니다. 나는 이처럼 많은 쿼리를 가지므로 먼저 공통적 인 것들을 가져 오는 일종의 축약 쿼리를 만들고 싶습니다.
public static TSource SetCommonProperties<TSource>(this TSource input, EntityBaseClass entity, Action<TSource> updater) where TSource : EntitySmallBase
{
input.Id = entity.Id;
input.Name = entity.Name;
input.ShortName = entity.Name;
updater(input);
return input;
}
내가 그렇게처럼 사용할 수 있습니다 :
var query = from a in EntityAs.AsEnumerable()
select new EntityASmall().SetCommonProperties(a, x =>
{
ASpecificProperty1 = x.1;
ASpecificProperty2 = x.2;
});
참고 AsEnumerable()
I는 다음과 같습니다 다소 유망한 확장 방법을 발견했다. 그것 없이는, "성명을 가진 람다식이 표현식 트리로 변환 될 수 없다"는 것을 알 수 있습니다. 이것은 대략 Action
부분을 LINQ-to-SQL의 표현식으로 변환하려고한다는 것을 의미합니다. AsEnumerable()
처럼 컬렉션을 로컬로 가져 오는 것 같습니다. 길어진 게시물에 대해 유감이지만 LINQ-to-SQL 및 Entity Framework에서 사용할 수있는 표현식이 있습니까? 미리 감사드립니다.
'EntityAs'는'IQueryable <>'입니까? –
'TEntity' 타입의 매개 변수를 취하고'TEntitySmall'로 변환하는 일반적인 메소드'ProjectOntoSmall'을 쓸 수 없습니까?기본 형식에서 파생되어야하는 이러한 형식 매개 변수에 제약 조건을 넣으면 작동합니다. –