2014-06-19 4 views
0

나는 과수원 프로젝트를위한 새로운 모듈에서 일하고있다. 우리는 주소 부분과 관련된 회사 부분을 만들었습니다. 내가 궁극적으로 얻으려고하는 것은 사용자가 UI (비 관리자 인터페이스)를 통해 다양한 검색 기준을 입력하고 모든 회사에 대해 검색을 수행하며 일치하는 결과를 반환 할 수 있도록 허용하는 것입니다.오차드에서는 관련 파트를 포함하는 쿼리를 어떻게 만듭니 까?

내가 고민중인 부분은 연결된 주소의 정보를 포함시킬 수있는 쿼리를 작성하는 방법입니다. 지금까지는 CompanyPart가 아닌 CompanyPartRecord를 기반으로 한 결과 만 성공적으로 반환 할 수있었습니다. CompanyPartRecord에는 분명히 연관된 AddressPart의 Address_Id 만 포함됩니다.

본질적으로 나는 입력 된 검색 기준과 일치하는 회사의 목록 또는 목록을 반환하는 이와 같은 것을 얻으려고합니다. zip 외에도 다양한 검색 옵션이 있으므로 확장 가능한 솔루션을 찾고 있습니다.

var query = _companyRepository.Table.AsQueryable(); 

if (!string.IsNullOrEmpty(Zip)) 
     query = query.Where(c => c.Address.Zip == Zip); 

var queryResult = query.ToList(); 

I는 다음과 같이 (위 그림 참조) IRepository와 IContentManager으로 모두를 사용하여 시도했다 :

var query = _contentManager.Query<CompanyPart, CompanyPartRecord>(); 
//var query = _contentManager.Query<CompanyPart>(); 

if (!string.IsNullOrEmpty(Zip)) 
    query = query.Where(c => c.Address.Zip == Zip); 

var queryResult = query.ToList(); 

여기에 실제 회사와 주소입니다 (부품 및 기록) :

public class CompanyPartRecord : ContentPartRecord 
    { 
     public virtual string Name { get; set; } 
     public virtual string Description { get; set; } 
     public virtual int Address_Id { get; set; } 
     public virtual string Phone { get; set; } 
     public virtual string OtherInformation { get; set; } 
     public virtual string Website { get; set; } 
     public virtual bool Inactive { get; set; } 

     // Keywords - Taxonomy 
     // Logo - associated part 
     // HasMissingData - derived 
     // NumberOfEmployees - associated part 
    } 

    public class CompanyPart : ContentPart<CompanyPartRecord>, ITitleAspect 
    { 
     internal readonly LazyField<AddressPart> AddressField = new LazyField<AddressPart>(); 

     public string Name 
     { 
     get { return Record.Name; } 
     set { Record.Name = value; } 
     } 

     public string Description 
     { 
     get { return Record.Description; } 
     set { Record.Description = value; } 
     } 

     public AddressPart Address 
     { 
     get { return AddressField.Value; } 
     set { AddressField.Value = value; } 
     } 

     public string Phone 
     { 
     get { return Record.Phone; } 
     set { Record.Phone = value; } 
     } 

     public string OtherInformation 
     { 
     get { return Record.OtherInformation; } 
     set { Record.OtherInformation = value; } 
     } 

     public string Website 
     { 
     get { return Record.Website; } 
     set { Record.Website = value; } 
     } 

     public bool Inactive 
     { 
     get { return Record.Inactive; } 
     set { Record.Inactive = value; } 
     } 

     public string Title 
     { 
     get { return Name; } 
     } 
    } 

public class AddressPartRecord : ContentPartRecord 
    { 
     public virtual string Street { get; set; } 
     public virtual string Street2 { get; set; } 
     public virtual string City { get; set; } 
     public virtual string CountyName { get; set; } 
     public virtual NationRecord State { get; set; } 
     public virtual string Zip { get; set; } 
    } 

    public class AddressPart : ContentPart<AddressPartRecord> 
    { 
     public string Street 
     { 
     get { return Record.Street; } 
     set { Record.Street = value; } 
     } 

     public string Street2 
     { 
     get { return Record.Street2; } 
     set { Record.Street2 = value; } 
     } 

     public string City 
     { 
     get { return Record.City; } 
     set { Record.City = value; } 
     } 

     public string CountyName 
     { 
     get { return Record.CountyName; } 
     set { Record.CountyName = value; } 
     } 

     public NationRecord State 
     { 
     get { return Record.State; } 
     set { Record.State = value; } 
     } 

     public string Zip 
     { 
     get { return Record.Zip; } 
     set { Record.Zip = value; } 
     } 
    } 

답변

0

두 부품 (예 : 회사)이 모두 포함 된 콘텐츠 유형이 있다고 가정합니다.이 경우 작동해야합니다.

var query = _contentManager.Query("Company").Where<AddressPartRecord>(x => x.Street == "query street"); 

var list = query.ToList(); 

목록에는 거리별로 필터링 된 ContentItems가 포함되어 있습니다. .As() 및 .As()를 사용하여 목록의 항목을 액세스하면 각 부분에 액세스 할 수 있습니다.

+0

제안 해 주셔서 감사합니다. 내가 제안한대로 검색어를 바꿨지 만 어떤 결과도 얻지 못했습니다. 나는 실제 테이블 데이터를 두 번 확인했으며 쿼리와 일치해야하는 테스트 데이터에는 2 개의 결과가 있습니다. – JSanders