将sql查询返回的列表存储在MVC中的模型中

本文关键字:模型 MVC 存储 列表 sql 查询 返回 | 更新日期: 2023-09-27 18:10:42

下面的代码返回大约2000项数据的列表。我想将其返回到model并将其传递回view

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是好的,我可以稍后操纵。有什么更好的办法吗?

将sql查询返回的列表存储在MVC中的模型中

如果没有一堆字段你可以直接选择List

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

如果有很多字段,可能值得研究AutoMapper或类似的东西。

。Select也可以是Func<>所以你可以在视图模型

中这样做
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
    };
}

那么当你从db上下文中选择时,你只需要使用。

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

试试下面的代码。List包含到原始数据表的链接,因此您不会复制数据并使用更多内存。

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();

        }
    }
}