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

时间:2011-08-10 23:48:51

标签: c# linq-to-sql

我在数据库中导入了许多CSV,现在每个都是一个包含一些常用列的表。我想弄清楚我是否可以使用Linq2Sql将它们组合在一起,而无需进行复制/修改。

我从未做过像Dynamic LINQ Queries这样的事情。 这是我唯一可以做的还是有其他选择?

查询是:

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);

1 个答案:

答案 0 :(得分:0)

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

您可以改为考虑编写存储过程或合并数据库中所有数据的视图。这是一个数据问题,而不是应用程序问题,对吗?

编辑:如果您想使用实体框架,您有多种选择。首先是 executing SQL & returning objects

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

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");
}