가정하자 나는 유형 A와 B가의 하위 유형이며, p는 A의 공공 재산 인 B를 가지고쿼리 서브 타입을 통해
쿼리 구축 할 때 :
Query<B>.EQ(b => b.p, x)
나는 것을 B 형의 객체 만 페이지 속성 비교 될 것이라고 기대하지만, 대신에 나는 내장 쿼리
이 컬렉션의 모든 항목 (A와 B)를 통해 적용
{ p: x }
, 그래서의 아무 소용이 없다는 것을 발견 타입 discriminator. OfType() LINQ는 형식 판별자를 쿼리에 추가하지만 쿼리에만 사용되며 제거 또는 업데이트에는 사용할 수 없습니다.
예 :
class A
{
public int p;
}
class B : A
{
public int q;
}
질의 :
Collection.AsQueryable<A>().OfType<B>().where(b => p == x)
복귀 P는 X와 동일 유형 B의 모든 요소 있지만 명령
Collection.Remove(Query<B>.EQ(b => b.p, x))
이 모든 요소를 삭제 A와 B를 입력하십시오. 여기서 p는 x와 같습니다. 유형 B의 요소 만 제거하려고합니다.
어떻게해야합니까?
을 구축하는 것입니다? –
속성뿐만 아니라 객체 유형을 검사하는 쿼리 – user1275011