2009-07-16 20 views
1
Dim entName = "Some Auto Dealer" 
    Dim whereEntity As Expression(Of Func(Of Entity, Boolean)) = Function(en) en.ENTY_Name = entName 
    Dim login = Repository(Of Entity).Create().FindSingle(whereEntity) 

    Dim whereDealer As Expression(Of Func(Of Dealer, Boolean)) = Function(dlr) dlr.Entity.Equals(login) 
    Dim dealer = Repository(Of Dealer).Create().FindSingle(whereDealer) 

    Dim whereContract As Expression(Of Func(Of MBI_Contract, Boolean)) = Function(c) c.Dealer.Equals(dealer) AndAlso c.Vehicle.Make.Equals(ford) 
    Dim fordContractsFromPSAuto = Repository(Of MBI_Contract).Create().FindAll(whereContract).ToList() 

どうすればよいでしょうか?それは動作し、それはかなり速いですが、それは私に過度の過労のようです。 FindSingleとFindAllは、Where節の引数としてExpression(Of Func(Of T, Boolean))をとります。これはラムダ式を書いたときの最初のすごい話ですので、それが悪いと私を許してください。Linq初心者。このLinqクエリをより簡潔に書くことはできますか?

メモリポジトリは汎用クラスで、CreateはDataContextオブジェクトを返すファクトリメソッドです。このアプリケーションはLinqToSqlを使用しています。

ありがとうございました。 乾杯、 〜ck in San Diego

+0

私は式に慣れていないよ、またはのFuncなどのうち、あなたがC#を使用して検討するかもしれませんおそらくラムダの表記法は簡単です。 –

+0

はい私は100%c#、c => c.Something = someValueは非常に使いやすいですが、この特定のプロジェクトはVB.NETで書かれており、C#に変換するのはプロジェクトマネージャの恐竜から撃墜されました。 – Hcabnettek

答えて

1

私はC#プログラマーですので、この提案は実際には適用されません。 C#では、通常、ラムダとメソッド呼び出しを含む1行を使用します。例えば:

代替として

、あなたは書き換えることができ...

Dim login = Repository(Of Entity).Create().FindSingle(_ 
    Function(en) en.ENTY_Name = entName) 

これはおそらく、しかし個人的な好みにダウンしています:

var login = Repository<Entity>.Create().Single(en => en.ENTY_Name == entName); 

は、私はあなたのようなVBで同様の何かをすることができると思いますクエリのような構文を使用してすべてのもの。私は、私は非常に迅速にあなたを変換することはできません非常に頻繁にそれを使用していないが、それはより多くのようになるだろう:

Dim contract = From c in Repository(Of MBI_Contract) _ 
    join d in Repository(Of Dealer) on c.Dealer equals d _ 
    where d.Entity.ENTY_Name = entName _ 
    select c 
+0

クール。アドバイスをいただきありがとうございます。 :) – Hcabnettek

関連する問題