使用EF4选择INTO

时间:2010-11-05 14:39:11

标签: entity-framework linq-to-entities entity-framework-4

我是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();

1 个答案:

答案 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();