2009-12-15 3 views
2

중첩 된 격자를 바인딩하기 위해 열거 가능한 항목을 반환하고 싶습니다. 위쪽 모눈에는 장부 제목이 표시되고 중첩 된 모눈에는 해당 장부의 작성자 목록이 표시됩니다.Linq가 IEnumerable를 반환하는 중 <T>

저자 컬렉션

static public Author[] Authors = 
{ 
    new Author {FirstName="Johnny", LastName="Good"}, 
    new Author {FirstName="Graziella", LastName="Simplegame"}, 
    new Author {FirstName="Octavio", LastName="Prince"}, 
    new Author {FirstName="Jeremy", LastName="Legrand"} 
} 

도서 컬렉션

static public Book[] Books = 
{ 
    new Book 
    { 
     Title="Funny Stories", 
     Publisher=Publishers[0], 
     Authors=new[]{Authors[0], Authors[1]}, 
     PageCount=101, 
     Price=25.55M, 
     PublicationDate=new DateTime(2004, 11, 10), 
     Isbn="0-000-77777-2", 
     Subject=Subjects[0] 
    }, 
    new Book 
    { 
     Title="LINQ rules", 
     Publisher=Publishers[1], 
     Authors=new[]{Authors[2]}, 
     PageCount=300, 
     Price=12M, 
     PublicationDate=new DateTime(2007, 9, 2), 
     Isbn="0-111-77777-2", 
     Subject=Subjects[0] 
    }, 

    new Book 
    { 
     Title="C# on Rails", 
     Publisher=Publishers[1], 
     Authors=new[]{Authors[2]}, 
     PageCount=256, 
     Price=35.5M, 
     PublicationDate=new DateTime(2007, 4, 1), 
     Isbn="0-222-77777-2", 
     Subject=Subjects[0] 
    }, 
    new Book 
    { 
     Title="All your base are belong to us", 
     Publisher=Publishers[1], 
     Authors=new[]{Authors[3]}, 
     PageCount=1205, 
     Price=35.5M, 
     PublicationDate=new DateTime(2006, 5, 5), 
     Isbn="0-333-77777-2", 
     Subject=Subjects[2] 
    }, 
    new Book 
    { 
     Title="Bonjour mon Amour", 
     Publisher=Publishers[0], 
     Authors=new[]{Authors[1], Authors[0]}, 
     PageCount=50, 
     Price=29M, 
     PublicationDate=new DateTime(1973, 2, 18), 
     Isbn="2-444-77777-2", 
     Subject=Subjects[1] 
    } 
}; 

1) 어떻게 다음 쿼리를 반환 할 수있는 Enumerable에서 메서드를 작성하는 방법?

(내 구현이 잘못 당연히)

public IEnumerable<Book> GetBook() 
{ 
    IEnumerable<Book> booklist 
    = from book in SampleData.Books 
      select new Book 
      { 
      Title = book.Title, 
      Authors = 
         from author in SampleData.Authors 
         where book.Authors == author 
         select new Author 
         { 
         FirstName = author.FirstName 
         } 
      }; 
    return booklist; 
} 

2)가을받은 출력 (중첩 BulletedList가 저자의 이름으로 작성되지 않았습니다).

나는 문제가

where book.Authors == author (checking Types with == operator). 

html로 코드

<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False"> 
    <Columns> 
      <asp:TemplateField HeaderText="Author List"> 
       <ItemTemplate> 
         <asp:BulletedList ID="BulletedList1" runat="server" 
         DataSource='<%# Eval("Authors") %>'> 
         </asp:BulletedList> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:BoundField DataField="Title" HeaderText="Title" 
      SortExpression="Title" /> 
     </Columns> 
</asp:GridView> 

에 의심 어떻게 적절한 결과를 얻을 수있는 코딩을 개선하기 위해?

답변

1

:

where book.Authors == author 

당신이해야 할 뭔가 같은 : 분명히

where book.Authors.Contains(author) 

을 한 저자와 저자를 비교하기 때문에 ==가 작동하지 않습니다. 책의 저자 모음에 지정된 저자가 포함되어 있는지 확인하고 싶습니다.

0

Eval ("Authors") 대신 Eval ("Authors.FirstName")을 사용하십시오.

또한 책과 저자간에 조인 할 필요가 없습니다. 책 개체에서 .Authors 속성을 선택할 수 있습니다. (이 경우 "저자"나는 저자가 실제로 오타 것을 가져 가서 그것을해야합니까?) 대신