SQLiteでもLINQしたいんだもん!!

GitHub - DbLinq/dblinq2007: LINQ provider for Oracle, PostgreSQL, MySQL, Ingres, SQLite, Firebird and ... SQL Server
イケるらしい

LINQ provider for Oracle, PostgreSQL, MySQL, Ingres, SQLite, Firebird and ... SQL Server (C# 3.0)

SqlMetalに対応するDbMetalというツールでLINQ to SQLクラスを生成できるようだ
で、
using DbLinq.Data.Linq;
とかやっとくと使えるようだ

でも、サンプルソース見ると、

            // BUG: This one throws a null reference for some reason.
            //Console.Clear();
            //var q3 = from c in db.Customers
            //         from o in c.Orders 
            //        where c.City == "London" select new { c, o };
            //foreach (var v in q3)
            //    ObjectDumper.Write(v);
            //Console.ReadLine();

とか書いてあって結構怖いぞ…
で、サンプルソースを実行してみるとちゃんと動いてて感動した
でも、動作がすごくトロいぞー…
サンプルプログラムがコンソールに動作結果を表示してくれるんだけど

            Console.Clear();
            Console.WriteLine("from p in db.Products orderby p.ProductName select p;");
            var q2 = from p in db.Products orderby p.ProductName select p;
            foreach (var v in q2)
                ObjectDumper.Write(v);
            Console.WriteLine("Press enter to continue.");
            Console.ReadLine();

こんなんが

Select Expression build: 687ms
Select SQL build: 13ms
Select SQL: SELECT CategoryID, Discontinued, ProductID, ProductName, QuantityPer
Unit, ReorderLevel, SupplierID, UnitPrice, UnitsInStock, UnitsOnOrder
FROM main.Products
ORDER BY ProductName

こんなん。流石にちょっと辛い気がする。SqlMetalが生成する物体もこんなに重いんだろうか?

            var compiled = CompiledQuery.Compile((Northwind nor) =>
                from d in nor.Products
                orderby d.ProductName
                select d
                );

軽くできるかしら?

エラー
1
型 'nwind.Northwind' はジェネリック型またはメソッド 'System.Data.Linq.CompiledQuery.Compile(System.Linq.Expressions.Expression>)' 内で型パラメータ 'TArg0' として使用できません。'nwind.Northwind' から 'System.Data.Linq.DataContext' への暗黙的な参照変換がありません。 D:\CSharp\code\FEZScraper\FEZScraper\lib\DbLinq-0.18\examples\DbLinq.SQLite.Example\Program.cs
140
28
DbLinq.SQLite.Example

Oh...
NorthwindはDbMetalさんが生成したクラス(ぽい)で、

public partial class Northwind : DbLinq.Data.Linq.DataContext
... で ...
public class DataContext : IDisposable

な感じ。ちくしょう!

こりゃSQLiteを生で触って自分で包んでやってLINQ to Objectかなんかで操作するようにしたほうが楽そうだ