C# 我需要将dbml文件中存储过程的结果转换为iQuery,以便在MVC视图中查看列表

C# 我需要将dbml文件中存储过程的结果转换为iQuery,以便在MVC视图中查看列表,c#,asp.net,asp.net-mvc,linq,linq-to-sql,C#,Asp.net,Asp.net Mvc,Linq,Linq To Sql,我有一个MVC项目,它有一个LINQtoSQLDBML类。这是一个名为Clients的表,其中包含客户信息。我可以使用我在Nerd晚餐中遵循的代码轻松地获得要在视图中显示的信息,但是我向dbml添加了一个存储过程,它的结果集是IQueryable,而不是IQueryable。我需要将IQueryable转换为IQueryable,以便在同一视图中显示它。存储过程的原因是,我可以将搜索字符串传递给存储过程,并返回与完整列表相同的信息,但会在搜索中过滤。我知道我可以使用Linq过滤整个列表,但我不想

我有一个MVC项目,它有一个LINQtoSQLDBML类。这是一个名为Clients的表,其中包含客户信息。我可以使用我在Nerd晚餐中遵循的代码轻松地获得要在视图中显示的信息,但是我向dbml添加了一个存储过程,它的结果集是IQueryable,而不是IQueryable。我需要将IQueryable转换为IQueryable,以便在同一视图中显示它。存储过程的原因是,我可以将搜索字符串传递给存储过程,并返回与完整列表相同的信息,但会在搜索中过滤。我知道我可以使用Linq过滤整个列表,但我不想要整个列表,所以我使用存储过程

这是我的ClientRepository中的代码,其中有一条注释,我需要在其中转换。什么代码会出现在注释点中

        public IQueryable<Client> SelectClientsBySearch(String search)
    {
        IQueryable<SelectClientsBySearchResult> spClientList = (from p in db.SelectClientsBySearch(search) select p).AsQueryable();

        //what is the code to convert IQueryable<SelectClientsBySearchResult> to IQueryable<Client>

        return clientList;
    }
public IQueryable SelectClientsBySearch(字符串搜索)
{
IQueryable spClientList=(从数据库中的p.SelectClientsBySearch(搜索)选择p.AsQueryable();
//将IQueryable转换为IQueryable的代码是什么
返回客户列表;
}

如果结果类型和客户机类型匹配(即存储过程从客户机返回Select*,并且自添加后您还没有修改DBML中的客户机实体),则可以将存储过程更改为自动返回客户机的IQueryable,而不是SelectClientsBySearchResult的IQueryable(请参阅下面的说明)。那么就不需要转换了

如果它们不同,有几种不同的方法。可以修改实体的分部类以向其添加转换方法,也可以使用扩展方法。当重新生成DBML后面的代码时,这两种方法都可以避免覆盖

要更改存储的过程返回类型,请执行以下操作:

当您将存储过程添加到DBML时,DBML设计器为存储过程创建了SelectClientsBySearchResult类型。如果将进程从服务器资源管理器拖动到“过程”窗格,则这是默认行为。相反,从服务器资源管理器中拖动存储的进程并将其放到客户机表上。现在,它的返回类型改为客户端的集合


我相信您也可以在事后更改返回类型(就像现在一样),但我现在没有安装它,也无法指导您完成此操作。

如果您的结果类型和客户端类型匹配(请注意,您的存储过程从客户端返回Select*,并且自添加后您还没有修改DBML中的客户端实体),您可以将存储过程更改为自动返回客户端的IQueryable,而不是SelectClientsBySearchResult的IQueryable(请参阅下面的说明)。那么就不需要转换了

如果它们不同,有几种不同的方法。可以修改实体的分部类以向其添加转换方法,也可以使用扩展方法。当重新生成DBML后面的代码时,这两种方法都可以避免覆盖

要更改存储的过程返回类型,请执行以下操作:

当您将存储过程添加到DBML时,DBML设计器为存储过程创建了SelectClientsBySearchResult类型。如果将进程从服务器资源管理器拖动到“过程”窗格,则这是默认行为。相反,从服务器资源管理器中拖动存储的进程并将其放到客户机表上。现在,它的返回类型改为客户端的集合


我相信您也可以在事后更改退货类型(就像现在一样),但我现在没有安装退货类型,也无法指导您完成此操作。

回答非常好,简单明了。出于某种原因,它不允许我将存储过程拖到表表面,但我在存储过程的属性中找到了一个设置,允许我更改返回类型,使其工作正常。谢谢你的快速回答非常好的回答,简单明了。出于某种原因,它不允许我将存储过程拖到表表面,但我在存储过程的属性中找到了一个设置,允许我更改返回类型,使其工作正常。谢谢你的快速回答