添加存储过程并从服务中调用它

时间:2015-03-24 13:32:48

标签: c# .net stored-procedures linq-to-sql

  1. 我创建了一个简单的存储过程,其中包含与customer表和其他相关表的一些连接,它们包含两个参数。我可以在SQL中执行此SP并运行。
  2. 我将此SP拖放到我的DBML文件中并重新编译。
  3. 我添加以下代码以便调用SP并将其返回到List

    public IQueryable<Entities.Customer> AllCustomerRanges(int CId, int ItemID)
    {
        List<Entities.Customer> c = myDataContext.spCustomerRanges(CId, ItemID).ToList();
    
    }
    
  4. 这给了我错误:

    无法隐式转换类型'System.Collections.Generic.List&lt; spCustomerRangesResult&GT;”到'System.Collections.Generic.List&lt; Entities.Customer&gt;'

    现在我没有类spCustomerRangesResult但是经过一些研究我很困惑,如果我做错了什么或者我是否需要实现一个具有Customer类具有的所有属性的类(听起来有点长篇大论)或者如果我刚刚犯了错误。

    我是怎么调用SP来显示列表中的数据的?

1 个答案:

答案 0 :(得分:1)

基于sp结果自动生成的新类spCustomerRangesResult,你应该将它转换为Entities.Customer,如下所示:

      public IQueryable<Entities.Customer> AllCustomerRanges(int CId, int ItemID)
        {
            var c = myDataContext.spCustomerRanges(CId, ItemID).ToList();

            if (c == null)
                return null;

            var customers = c.Select(a => new Entities.Customer
            {
                FirstName=a.spResultFirstName,
                LastName = a.spResultLastName
                //this just example conversion, change it as needed. 
            });


            return customers;

        }

请注意,我返回IQueryable,即使您在使用ToList()但仍然返回IQuerybale时采用的方法可能不需要。我不知道所有细节,所以这只是为了展示如何转换,但整个方法可能需要重新分解。