2012-11-07 3 views
0

방법 아래 IEnumerable<Competition>.AsQueryable()는 누구나 할 방법을하시기 바랍니다 안다면 내가 IQueryable<Competition>IQueryable<Submission>IQueryable <SomeClass>을 IQueryable <T> 메서드로 반환 할 수 있습니까? 이 <code>IQueryable<T></code></p> <p>을 기대하고 있기 때문에 QueryableEntities에서

를 반환하는 단 하나의 방법을 쓸 수 있습니다 반환 할 수 없습니다입니다 IQueryable<Competition>를 반환합니다 알려주세요. 감사합니다.

public partial class WinBoutsDataContext<T> : System.Data.Linq.DataContext where T : class 
{ 
    public IQueryable<T> QueryableEntities 
    { 
     get 
     { 
      if (typeof(T).Equals(typeof(Model.Competition))) 
      { 
       return this.ConvertToCompetitionList(
         this.GetTable<Storage.Competition>()).AsQueryable(); 
      } 
      else if(typeof(T).Equals(typeof(Model.Submission))) 
      { 
       return this.ConvertToSubmissionList(
         this.GetTable<Storage.CompetitionEntry>()).AsQueryable(); 
      } 
     } 
    } 

    public DataAccess.Model.Competition ConvertToCompetition(DataAccess.Storage.Competition comp) 
    { 

     DataAccess.Model.Competition modelComp = new DataAccess.Model.Competition 
     { 
      CompetitionID = comp.CompetitionID, 
      Active = comp.Active, 
      CompetitionStatusID = 
      comp.CompetitionStatusID, 
      Duration = comp.Duration, 
      EndDate = comp.EndDate, 
      Entrants = comp.Entrants, 
      Featured = comp.Featured, 
      Image = comp.Image, 
      IsOvertime = comp.IsOvertime, 
      MaxEntrants = comp.MaxEntrants, 
      Notes = comp.Notes, 
      OvertimeDuration = comp.OvertimeDuration, 
      OvertimeEnd = comp.OvertimeEnd, 
      OvertimeStart = comp.OvertimeStart, 
      ParentCompetitionID = comp.ParentCompetitionID, 
      Prize = comp.Prize, StartDate = comp.StartDate, 
      SuggestedBy = comp.SuggestedBy, 
      Summary = comp.Summary, 
      Title = comp.Title 
     }; 

     return modelComp; 
    } 

    public IEnumerable<DataAccess.Model.Competition> ConvertToCompetitionList(IEnumerable<DataAccess.Storage.Competition> compList) 
    { 
     List<DataAccess.Model.Competition> compModelList = new List<DataAccess.Model.Competition>(); 

     foreach (DataAccess.Storage.Competition comp in compList) 
     { 
      compModelList.Add(ConvertToCompetition(comp)); 
     } 

     return compModelList; 
    } 
} 

답변

2

애드리안에 의해 설계 원칙에 의견에 동의하지만, 당신이 그것을

public IQueryable<T> QueryableEntities 
{ 
    get 
    { 
     if (typeof(T).Equals(typeof(Model.Competition))) 
     { 
      return this.ConvertToCompetitionList(
        this.GetTable<Storage.Competition>()).AsQueryable() as IQueryable<T>; 
     } 
     else if(typeof(T).Equals(typeof(Model.Submission))) 
     { 
      return this.ConvertToSubmissionList(
        this.GetTable<Storage.CompetitionEntry>()).AsQueryable() as IQueryable<T>; 
     } 
    } 
} 

컴파일하고 잘 실행이 방법을 수행하려는 경우. 여기서 x as IQueryable<T>은 을 주조 할 수 있다면 IQueryable<T>으로, 그렇지 않으면 null이됩니다.

참고 :이는 경우 당신은 당신의 제네릭 클래스를 생성 할 때이있는 경우 그것이 IQueryable<Model.Submission>를 반환합니다 Model.Submission을 입력 IQueryable<Model.Competition>를 반환합니다 Model.Competition을 입력하고 다른 유형의 null을 반환된다는 것을 의미합니다.

+0

고마워 ..... 그랬어 !! – Bitsian

0

일반적으로 일반화하지 않는 것이 가장 좋습니다. 많은 개발자가 한 속성/메서드/클래스가 많은 작업을 수행하는 데 많은 시간을 소비하는 것처럼 보이지만 많은 객체 지향 원칙을 위반합니다. 개인적으로 나는 단지 CompetitionsSubmissions이라는 2 개의 속성을 사용합니다. QueryableEntities보다 더 많은 의도가 드러납니다.

관련 문제