2011-07-04 3 views
0

を作成するには、私のロジックのコードです:PredicateExtensionsを使用しての質問ここsqlscriptes

SELECT 
[Extent1].[CustomerID] AS [CustomerID], 
[Extent1].[Custname] AS [CustEname], 
[Extent1].[Site] AS [DefaultSite], 
[Extent1].[Currency] AS [Currency], 
[Extent1].[PayTerm] AS [PayTerm], 
[Extent1].[BAddr1] AS [BillAddr1], 
[Extent1].[BAddr2] AS [BillAddr2], 
[Extent1].[BAddr3] AS [BillAddr3], 
[Extent1].[BContact] AS [BillContact], 
[Extent1].[BTel] AS [BillTel], 
[Extent1].[BFax] AS [BillFax], 
[Extent1].[BEMail] AS [BillEMail], 
[Extent1].[Company] AS [DlvyCompany], 
[Extent1].[Addr1] AS [DlvyAddr1], 
[Extent1].[Addr2] AS [DlvyAddr2], 
[Extent1].[Addr3] AS [DlvyAddr3], 
[Extent1].[Contact] AS [DlvyContact], 
[Extent1].[Tel] AS [DlvyTel], 
[Extent1].[Fax] AS [DlvyFax], 
[Extent1].[EMail] AS [DlvyEMail], 
[Extent1].[Remark] AS [Remark], 
[Extent1].[User] AS [User], 
[Extent1].[DT] AS [UpdateDT] 
FROM [dbo].[Customer] AS [Extent1] 

私はすべてのデータを取得:

var predicate = PredicateExtensions.False<Customer>(); 
predicate = predicate.Or(p => p.CustomerID.Contains("N")); 

using (Entities e = new Entities()) 
{ 
    var r = from p in e.Customer.AsQueryable().Where(predicate.Compile()) 
      select p; 
    foreach (var _r in r) 
     Console.WriteLine(_r.CustomerID); 
} 

、その後、私はSQL Serverのプロファイラを使用するには、このようなSQLスクリプトを取得します私のデータベースから、しかし、私はSQLスクリプトの終わりに条件があることを意味し、すべてのデータを取得することを意味しますが、customeidが含まれていますN(p => p.CustomerID.Contains("N"))

私は間違っている.... plsはいくつかのポイントを与える!

答えて

0

この問題はCompile()メソッドにあります。使用する拡張メソッドには、引数として式が必要です。 AsQueryable()を呼び出すと、あなたのケースでは何も行われず、IEnumerable<Customer>拡張メソッドWhere(Func<Customer, bool>)が呼び出されます。あなたがしたいのは、代わりにIQueryable<Customer>拡張メソッドWhere(Expression<Func<Customer, bool>>)を呼び出すことです。これを行うには単純です:Compile()を呼び出さないでください。predicateは既に式です。また、方法は、あなたが(ほとんど)何もしないクエリ式(from …)を使用するので、あなたはそれを残すことができます:あなたの説明のための

var r = e.Customer.Where(predicate); 
+0

おかげで、あなたは私に素晴らしいサービスを与えています。 – winter

関連する問題