如何将LINQ (l2s)查询应用于实体列表



我在数据库中导入了许多csv,现在每个csv都是一个表,其中包含一些公共列。我想弄清楚我是否可以使用Linq2Sql将它们组合在一起而不做复制/修改。

我从来没有做过动态LINQ查询之类的事情这是我唯一能做的还是还有别的选择?

查询为:

var excelRows = 
    from c in Apr10s // <-- GOAL - run on Apr10s, May10s, Jun10s, ... etc....
    where
        c.VolumeStats != null
        && c.VolumeStats > 0
        && c.Costperunit != null
        && c.Costperunit > 0
    select new
    {
        c.Publisher,
        c.CampaignNumber,
        c.Campaign,
        c.RevenuePerUnit,
        c.Costperunit,
        c.VolumeStats,
        c.Rep
    };
var reportItems =
    from c in excelRows
    select new
    {
        Publisher = c.Publisher,
        Campaign = c.Campaign,
        Payout = c.Costperunit,
        Actions = c.VolumeStats,
        Revenue = (decimal)c.Costperunit.Value * (decimal)c.VolumeStats.Value
    };
var reportItemsByPublisher = reportItems.GroupBy(c => c.Publisher);

不太容易。如果您使用Linq to entities,那么使用运行时变量表名从表中进行选择非常简单。Linq to Sql更具有挑战性。

您可能会考虑编写一个存储过程或视图来整合数据库中的所有数据。这是数据问题,不是应用问题,对吧?

编辑:如果你想使用实体框架,你有多种选择。首先是执行SQL &返回对象。

或者,创建一个对象,并从上下文中为每个表返回它,如下所示

using (var c = new myContext())
{
    var result1 = c.CreateObjectSet<MyType>("table1");
    result1.Where(x => blah).Select(y => etc)
    var result2 = c.CreateObjectSet<MyType>("table2");
    var result3 = c.CreateObjectSet<MyType>("table3");
}

最新更新