2011-08-10 42 views
0

我在數據庫中導入了一些CSV,每個CSV現在都是一個包含一些公共列的表。我試圖弄清楚我是否可以使用Linq2Sql將它們組合在一起而不進行復制/修改。如何將LINQ(12s)查詢應用於實體列表?

我從來沒有做過像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); 
+0

如果這是一個一次性的東西是不是你最好只寫一個SQL腳本,以鞏固數據? – kprobst

+0

這是真的。如果我可以生成一些可重用的代碼,那將會很好,因爲他們可能會要求我再次執行此操作。 –

回答

0

不是太容易了。如果您使用Linq到Entites,使用運行時變量表名從表中進行選擇非常簡單。 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"); 
} 
+0

我很樂意切換到EF - 您能否指出我所提到的功能的相應文檔? –