2015-09-01 2 views
0

У меня есть код ниже, который возвращает список из приблизительно 2000 элементов данных. Я хочу вернуть это в model и передать его обратно на view.Хранение списка, возвращаемого из запроса sql в модели в MVC

var clientData = db.Clients.Where(x => x.Firm == firm).ToList(); 
List<ClientEmployees> clientEmployees = new List<ClientEmployees>(); 

foreach(var client in clientData) 
{ 
     //store in the in the clientEmployees list    
} 

Однако я действительно не хочу проходить через 1000 строк данных, чтобы сохранить их в списке. Мне нужно будет манипулировать этими данными позже, поэтому я подумал, что было бы полезно использовать model, которые я мог бы впоследствии манипулировать. Любые идеи сделать это лучше?

+0

Что именно вы делаете в петле foreach? –

+0

Вы пробовали этот код clientEmployees.AddRange (clientData). – Arash

+0

Внутри цикла foreach я захотел добавить клиента в список ClientEmployees. clientEmployee.AddRange() по-прежнему требуется тип клиентов ClientEmployees для добавления. Так что это не сработает. – WobotCode

ответ

0

если не куча полей, которые вы можете просто выбрать список

var clientEmployees = db.Clients.Where(x => x.Firm == firm) 
         .Select(a => new ClientEmployees { 
          Id = a.Id, 
          Name = a.Name, 
          etc.. 
         }) 
         .ToList(); 

если есть много полей, это может быть стоит посмотреть в AutoMapper или что-то подобное.

.Select также может занять Func <> так что вы могли бы сделать что-то подобное в вашей ViewModel

public class ClientEmployees 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 

    public static Func<Client, ClientEmployees> FromEntity = item => new ClientEmployees() 
    { 
     Id = item.Id, 
     Name = item.Name, 
     //map all fields 
    }; 
} 

тогда, когда вы выбираете из контекста дб вы просто использовать.

var clientEmployees = db.Clients.Where(x => x.Firm == firm) 
        .Select(ClientEmployees.FromEntity) 
        .ToList(); 
+0

Это позволяет мне возвращать мой тип данных ClientEmployees в виде списка без использования для цикла foreach. Я думаю, это улучшает производительность, так как теперь мне не нужно итерации. Я прав, думая об этом @ JamieD77? – WobotCode

+0

@WobotCode Его все еще повторяется над сборкой (как еще вы ожидаете, что значения будут заполнены) –

0

Попробуйте код ниже. Список содержит ссылки на исходный тип данных, поэтому вы не копируете данные и не используете больше памяти.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Data; 
using System.Data.SqlClient; 

namespace ConsoleApplication45 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string connStr = "Enter Your connection strin gHere"; 
      string SQL = "Enter your SQL Here"; 

      SqlDataAdapter adapter = new SqlDataAdapter(SQL, connStr); 

      DataTable dt = new DataTable(); 
      adapter.Fill(dt); 
      string firm = "abc"; 

      List<DataRow> clientData = dt.AsEnumerable().Where(x => x.Field<string>("firm") == firm).ToList(); 


     } 
    } 

} 
Смежные вопросы