我有一个dbml,它拖延了存储过程。我有一个具有get和set属性的EmployeeModel类。
我有一个接口IEmployee和一个Repository Employee Repository,它具有方法的实现。请参考code.In存储过程GetRoles我只有SELECT * FROM ROLE。
在存储库中如何遍历结果集。可以将ISingleResult更改为dbml designer文件中的IMultipleResult吗?
EmployeeModel.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace MvcWebsite.Models
{
public class EmployeeModel
{
public int RoleId { get; set; }
public string RoleName { get; set; }
public string Description { get; set; }
public string TaskMark { get; set; }
public int RoleFlag { get; set; }
}
}
IEmployee:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MvcWebsite.Models;
namespace MvcWebsite.DAL
{
public interface IEmployees
{
IList<EmployeeModel> ListAll();
// void Save(EmployeeModel employ);
}
}
EmployeeRepository.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using MvcWebsite.Models;
using System.Data.Linq;
namespace MvcWebsite.DAL
{
public class EmployeeRepository:IEmployees
{
private DataDataContext _dataContext;
public EmployeeRepository()
{
_dataContext = new DataDataContext();
}
public IList<EmployeeModel> ListAll()
{
//IMultipleResults result =_dataContext.GetRoleDetails();
//var Emps = result.GetResult(EmployeeModel);
List<EmployeeModel> emp = _dataContext.GetRoleDetails();
// foreach (GetRoleDetailsResult role in Emps)
// {
// role.Description=Emps.
// }
return Emps.ToList();
}
}
}
答案 0 :(得分:0)
您可以按如下方式遍历结果集:
List<EmployeeModel> employeeModels = new List<EmployeeModel>();
foreach (EmployeeModel employeeModel in _dataContext.GetRoleDetails())
{
employeeModels.Add(employeeModel);
}
或者您可以使用System.Linq.Enumerable类ToList&lt;&gt;方法如下:
List<Product> products = context.GetProducts().ToList<Product>();
当存储过程返回多个结果集时,使用IMultipleResults。但是,当您将此类过程放到设计器上时,它不会生成IMultipleResults。为此,您可以更改设计器生成的代码以使用IMultipleResults,如下所示:
[global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.GetCustomerAndProducts")]
[ResultType(typeof(Customer))]
[ResultType(typeof(Product))]
public IMultipleResults GetCustomerAndProducts()
{
IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())));
return ((IMultipleResults)(result.ReturnValue));
}
但是,当您在设计器中进行任何更改时,它会覆盖您的修改,因为它会重新生成代码。为避免这种情况,您可以使用部分类。
或者您也可以使用SqlMetal工具。它是一个命令行工具,可为.NET Framework的LINQ to SQL组件生成代码和映射。该工具生成IMultipleResults。您可以在此处获取此工具的详细信息:
http://msdn.microsoft.com/en-us/library/bb386987.aspx
编辑:
无论您在ASP.Net Mvc或WinForms或任何其他表示层中工作,存储库功能都是相同的。
您可以将存储库功能更改为:
public List<EmployeeModel> ListAll()
{
return _dataContext.GetRoleDetails().ToList<EmployeeModel>();
}
或者:
public List<EmployeeModel> ListAll()
{
List<EmployeeModel> employeeModels = new List<EmployeeModel>();
foreach (EmployeeModel employeeModel in _dataContext.GetRoleDetails())
{
employeeModels.Add(employeeModel);
}
return employeeModels;
}