我是c#,linq和EF4的新手,所以请耐心等待。我确信这很简单,但没有看到它。
我正在替换的存储过程执行SELECT INTO来查询一堆数据,执行一些简单的转换,然后将结果输出到另一个表中。然后,返回这组数据以便在代码中进行本地处理。
我有一个查询,将我的数据拉入匿名类型并处理所有转换。但是,如何将数据发送到结果表中呢?
最初,我想过使用实体类型来存储我的初始结果。但我有额外的字段,我需要进行本地处理,不会存储在结果表中。
感谢任何一位愿意为我解决问题的EF大师!
编辑:这是基于Morteza帮助的一些伪代码,但似乎没有移动数据 -
var ctx = new ReportEntities();
var query = from s in ctx.Source
select new
{
s.SourceID,
s.OtherStuff
};
query.ToList().Select(q => new Report()
{
SourceID = q.SourceID,
OtherStuff = q.OtherStuff
});
ctx.SaveChanges();
答案 0 :(得分:1)
从EF4开始,您可以使用各自的存储过程更新模型,并将其作为函数导入。我认为最简单的方法是利用这个新功能并创建第二个过程,将结果数据作为参数接受并将它们保存到结果表中。所以你可以在完成数据处理后调用这个函数。
<强>更新强>
var ctx = new ReportEntities();
var query = (from s in ctx.Source select new {
s.SourceID,
s.OtherStuff}).ToList();
List<Report> reports = query.Select(q => new Report()
{
SourceID = q.SourceID,
OtherStuff = q.OtherStuff
}).ToList();
// Now you need to add your new report objects to the Context:
foreach(report in reports) {
ctx.Reports.AddObject(report);
}
// Now is the time to call the SaveChanges on ObjectContext:
ctx.SaveChanges();