인앱보고 도구에 대한 백엔드로 동적 Linq를 사용하고 있으며 액세스해야하는 곳으로 갈 수없는 문제에 직면했습니다. 테이블은 1 : M 관계입니다.동적 Linq - 1 대 다수 관계가있는 테이블에 가입
내 단순화 된 데이터 구조는 이것이다 :이 문제없이 작동
from a in context.Table_A
select new
{
a.RefNo,
val = from b in a.Table_B
where (b.A_ID == a.ID)
where (b.code == "A0001"
select(b.Value).FirstOrDefault()
}
:
나는이 질의 한 경우 표준 Linq에에 내가 같이 쿼리를 쓸 것입니다. 그러나 동적 Linq를 사용하여 쿼리를 시도 할 때 조인을 사용할 수 없습니다.
아래 코드에서 내가 뭘보고 있는지 알 수 있지만 분명히 "a"를 사용할 수 없습니다. 및 "a.Table_B"쿼리에서 참조합니다. 이 컨텍스트에서 Table_B에 액세스하려면 무엇을해야합니까?
string select = "new (Ref_No,
val = from b in a.Table_B
where (b.A_ID == a.ID)
where (b.code == \"A0001\"
select(b.Value).FirstOrDefault()";
var results = context.Table_A.Select(select);
편집 1 :
호건의 코멘트 @ 답변에 - 왜 조인을 사용하지 않습니다 보고서 시스템은 동적이며 선택 사항이 Table_B에 가입되지 않거나 (또는 실제로 Table_B에 여러 번 가입 함) 조인은 선택적이어야합니다. 내 다른이 문제는 Select 메서드와 달리 문자열을 매개 변수로 전달할 수 있기 때문에 Join() 메서드를 그렇게 쉽게 호출 할 수 없습니다. 내가 찾은 가장 가까운 것은 dynamic Linq join extention method입니다. 사용을 고려해야 할 수도 있지만 동적 선택()과 성가신 느낌이 들었습니다.
편집 2 :이 오류 제공
delegate string searchTableA(Table_A a);
public void Search()
{
....
searchTableA sel = (a) =>
{
return (from b in context.Table_B
where (b.A_ID == a.ID)
select (b.Value)).FirstOrDefault();
};
var res = context.Table_A.Select(sel);
}
: :이 멀리있어 호건의 제안을 바탕으로
내가 돈 때문에 정확한 코드를 제공하는 'System.Data.Entity.DbSet<TestDynamicLinqJoins.Table_A>' does not contain a definition for 'Select' and the best extension method overload 'System.Linq.Dynamic.DynamicQueryable.Select(System.Linq.IQueryable, string, params object[])' has some invalid arguments
왜 linq의 결합 기능을 사용하지 않습니까? – Hogan
@Hogan - 편집을 참조하십시오. – GrandMasterFlush
@GrandMasterFlush 귀하의 [질문] [1] [1]에 대한 해결책을 얻었습니까? http : //stackoverflow.com/questions/17567636/dynamic-linq-joining-a-table-with-1-to-many -relationship – sridharnetha