.net entity framework 存储过程 能直接返回 datatable吗
因为需要实现的是一个报表功能
列是按照 用户 在界面上选择的 列 来自动生成的
所以每次出来的数据部固定 无法使用 实体类型来 映射
设计器并没有提供对返回值不是实体(比如无返回值和标量返回值)的存储过程的自动生成
求大神给点方案
设计器并没有提供对返回值不是实体(比如无返回值和标量返回值)的存储过程的自动生成。
.net framework 4.0
存储过程如下:
ALTER Proc BroadBand_GetReports
(
@CableID VarChar(200),
@WorkStationID INT,
@StartTime datetime,
@EndTime datetime
)
as
--BEGIN REPORT
--1. select data
select r.ID,
r.CableID,
r.SubCabelID,
r.ProductCode,
r.WorkStationID,
r.DataElementID,
r.DataElementValue,
r.CreateUser,
r.ChangeUser,
r.ChangeDate,
r.CreateDate,
r.ShiftID,
r.Category,
r.Property1,
r.Property2,
r.Property3,
r.Property4,
r.Property5,
w.WorkStationName + e.DataElementName AS element
into #tempnpi
from RoutingWorkstationDataElement r,
DataElement e,
WorkStation w
where r.DataElementID=e.DataElementID and r.WorkStationID = w.ID
and r.changeDate between '2012-07-10' AND '2012-07-12'
--2. summary multi times to only one
DECLARE @DataElementID INT, @DataElementValue Varchar(500)
DECLARE Element_Cursor CURSOR FOR
SELECT CableID, WorkStationID, DataElementID, DataElementValue from #tempnpi
OPEN Element_Cursor
FETCH NEXT FROM Element_Cursor INTO @CableID, @WorkStationID, @DataElementID, @DataElementValue
WHILE @@FETCH_STATUS = 0
BEGIN
update #tempnpi
set DataElementValue = DataElementValue + '; ' + (select DataElementValue from #tempnpi where CableID=@CableID and workstationid=@WorkStationID
and DataElementID = @DataElementID )
where CableID=@CableID and workstationid=@WorkStationID and DataElementID = @DataElementID
and DataElementValue = ''
FETCH NEXT FROM Element_Cursor INTO @CableID, @WorkStationID, @DataElementID, @DataElementValue
END
CLOSE Element_Cursor
DEALLOCATE Element_Cursor
--3. pivot
DECLARE @Eachfield NvarChar(200)
DECLARE @WorkStationIDNoMean INT
DECLARE @Fields NvarChar(MAX)
SET @Fields = ''
DECLARE FILEDS_CURSOR CURSOR FOR
SELECT DISTINCT workstationid, Element From #tempnpi Order by Workstationid
OPEN FILEDS_CURSOR
FETCH NEXT FROM FILEDS_CURSOR INTO @WorkStationIDNoMean,@Eachfield
WHILE @@FETCH_STATUS = 0
BEGIN
SET @Fields = @Fields + '[' + @Eachfield + '],'
FETCH NEXT FROM FILEDS_CURSOR INTO @WorkStationIDNoMean,@Eachfield
END
CLOSE FILEDS_CURSOR
DEALLOCATE FILEDS_CURSOR
DECLARE @SQL NvarChar(MAX)
SET @SQL =
'SELECT ProductCode,CableID , '+
SubString(@Fields,1, Len(@Fields)-1)+
'FROM
(SELECT ProductCode,CableID, ELEMENT, DataElementValue
FROM #tempnpi ) AS SourceTable
PIVOT
(
MAX(DataElementValue)
FOR ELEMENT IN ('+SubString(@Fields,1, Len(@Fields)-1)+
')) AS PivotTable'
EXEC (@SQL)
drop table #tempnpi
[最优解释]
可以写一个方法返回一个DateTable吧,我就是这么做的
public DataTable GetReportsBySomething(string id)
{
DataTable dtList = new DataTable();
dtList.Columns.Add(new DataColumn("员工", typeof(string)));
dtList.Columns.Add(new DataColumn("使用时间", typeof(string)));
var work = GetWorkList(p=>条件);
foreach (var w in work)
{
DataRow drRow = dtList.NewRow();
drRow[0] = GetNameById(w.Key);
drRow[1] = w.TotalTime;
dtList.Rows.Add(drRow);
}
return dtList;
}
[其他解释]
当然方法有很多,就这个思路吧 new一个datatable,然后再把你查出来的泛型遍历到这个表里
但是这个写的貌似不是公用的 需要改改吧
[其他解释]
我用EF,返回list《实体》 绑定rdlc报表 ,代码如下:
private void LoadDataSource(List<ExecProfitOfStatistics_Result> datasource)
{
this.rvEmp.LocalReport.DataSources.Clear();
ReportParameter rpCountry = new ReportParameter("departcodeReport", "2");
this.rvEmp.LocalReport.SetParameters(new ReportParameter[] { rpCountry });
this.rvEmp.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", datasource));
this.rvEmp.LocalReport.Refresh();
}
[其他解释]
楼主,你有没有遇到我这样的问题?
http://topic.csdn.net/u/20120720/10/c93cc81e-2b56-43d9-b38f-1c6f93469cd1.html?27695
[其他解释]
这个简单 读取出来后LIST
写个万能转换 LIST TO DATATABLE
用反射
http://www.cnblogs.com/linyijia/archive/2010/12/31/1923091.html
[其他解释]
http://www.cnblogs.com/wlflovenet/archive/2011/12/30/EF11.html
看我写的文章 第八条
[其他解释]
http://www.cnblogs.com/yangtongnet/archive/2010/07/06/1772314.html
去看看这个,我也在使用linq to entity 我用的就是这个
[其他解释]
有没有人知道啊?
顶上去。。。
[其他解释]
还是没人知道啊?
EF 4.0 没人用么?
------其他解决方案--------------------
谢谢回复
我用的 entity framework的 ORM。。
里面的返回类型 只有三张
无返回值,返回标量 和 负责类型....
我只是想象 ADO.NET 一样直接返回 存储过程执行的结果
[其他解释]
那就直接用ADO.NET多好。。。
[其他解释]
写个公用方法
[其他解释]
返回DataTable的还真没见过!!!