2014-12-08 2 views
0

У меня есть таблица базы данных Staff с колонками Name, Email, Address и DateOfBirth. В моем веб-приложении у меня есть отдельный класс ClassMyBase, имеющий несколько методов. Один из методов использует LINQ к Entities:Тип возвращаемых данных метода при использовании LINQ to Entities

public static List<Staff> ShowAll() 
{ 
    using (ModelPersonnelContainer myContainer = new 
      ModelPersonnelContainer()) 
    { 
     return myContainer.Staff.ToList(); 
    } 
} 

..., а затем в ButtonShowAll обработчик событий в WebForm1:

protected void ButtonShowAll_Click(object sender, EventArgs e) 
{ 
     GridViewAll.DataSource = ClassMyBase.ShowAll(); 
     GridViewAll.DataBind(); 
} 

До сих пор так хорошо, НО, если я добавить фильтрации к моему public static List<Staff> ShowAll():

public static xyz ShowAll() 
{ 
     using (ModelPersonnelContainer myContainer = new 
       ModelPersonnelContainer()) 
     { 
      selectedRrows=from item in myContainer.Staff 
       select new 
      { 
       Name=item.Name, 
       Email=item.Email 
      } 
     } 
} 

Мой метод не будет работать, потому что тип данных возврата не более, чем ранее. Любые простые решения? Что может это вернуть тип данных xyz be?

Если я ставлю все вместе (не отдельный класс в моем проекте) и имеют только ButtonShowAll он будет работать все в порядке, так как это:

protected void ButtonShowAll_Click(object sender, EventArgs e) 
{ 
      using (ModelPersonnelContainer myContainer = new 
      ModelPersonnelContainer()) 
      { 
       var selectedRows = from item in myContainer.Staff 
            select new 
            { 
            Name=item.Name, 
            Email=item.Email 
            }; 
       GridView1.DataSource = selectedRows.ToList(); 
       GridView1.DataBind(); 
} 
+1

Вы можете использовать 'List ' в качестве типа – AlexanderBrevig

+1

вам нужно добавить '.ToList()' после фильтрации в вашем статическом методе, чтобы вернуть список сотрудников. – Mivaweb

ответ

1

Эта часть кода создает анонимный класс:

new 
{ 
    Name=item.Name, 
    Email=item.Email 
} 

вы должны назвать его явно, то будет использоваться это имя класса, и вы можете ввести свой тип возвращаемого значения:

new Staff() 
{ 
    Name=item.Name, 
    Email=item.Email 
} 

Кроме того, вы можете использовать ToList() или изменить тип возврата к IEnumerable<Staff>, так как запрос LINQ не будет возвращать List<Staff>:

var selectedRows = ... 
        .ToList(); 
+1

Это лучше, чем предлагаемое нами «динамическое» решение. Можно утверждать, что вам может быть лучше с классом «StaffViewModel» для привязки. Затем вы можете добавить определенные правила для этого класса. – AlexanderBrevig

+0

@Timpe: нужна дополнительная помощь? –