2012-01-05 9 views
22

のエンティティへのLINQでサポートされていない、誰もが私の問題を解決するために私を助けることができます。私は例外を取得しています。これによりLINQ式ノードタイプの「起動」がエンティティフレームワーク

Expression<Func<InvoiceHeader, bool>> predicate = PredicateBuilder.True<InvoiceHeader>(); 
predicate = predicate.And(o => o.CompanyId == oInvoiceHeader.CompanyId); 
List<InvoiceHeader> lstInvheader=Getdata(predicate).ToList(); 

次のように私のコードで

public IEnumerable<InvoiceHeader> Getdata(Expression<Func<InvoiceHeader, bool>> predicate) 
{ 
    return AccountsContext.InvoiceHeaders.Include("Company").Include("Currency") 
     .Include("BusinessPartnerRoleList").Include("DocumentType") 
     .Where(predicate); 
} 

.....

私が使用しています:私は、下記のコードを使用しています。 [System.NotSupportedException] --- {"LINQ式ノードタイプ 'Invoke'はLINQ to Entitiesではサポートされていません。}}

+0

のように見えました。私はあなたがそれを追加することを忘れたと思う。 – THelper

+0

私の記憶が正しければ、これはPredicateBuilderおそらくインターネット作品から取った方法によるものです。このバージョンで試してください:https://github.com/jbevain/mono.linq.expressions/blob/master/Mono.Linq.Expressions/PredicateBuilder.cs –

答えて

1

LinqからEFへのクエリはSQLに変換されます。この例外は、ランタイムがSQLでサポートされていないため、コードをSQLクエリに変換できないことを意味します。

SQLがサポートしていない部分を省略するようにコードを変更することも、以下のように.AsEnumerable()を呼び出すことでデータベースからデータを引き出すこともできます。これはLinq-to-オブジェクト

public IEnumerable<InvoiceHeader> Getdata(Expression<Func<InvoiceHeader, bool>> predicate) 
{ 
    return AccountsContext.InvoiceHeaders.Include("Company").Include("Currency") 
     .Include("BusinessPartnerRoleList").Include("DocumentType") 
     .AsEnumerable() 
     .Where(predicate); 
} 
+0

これを行うことで、私は次のエラーメッセージ 'System.Collections .Generic.IEnumerableは「と最高の拡張メソッドのオーバーロード 『System.Linq.Enumerable.Where (System.Collections.Generic.IEnumerable 、システム』の定義が含まれていません」。 funcが)」)いくつかの無効な引数 –

+8

.AsEnumerable後にどこをやって(持っているすべてのレコードが吸い込まれることを意味します。細心の注意を払って、このアドバイスを使用してください。 – mayu

-1

は、これを試してください

var companyId = oInvoiceHeader.CompanyId; 
predicate = predicate.And(o => o.CompanyId == companyId); 
+2

それはあなたのために働くのですか、それとも何も試していないと推測していますか? –

48

この問題は、ジョーAlbahariによってLINQKITに存在AsExpandable()メソッドを使用して解くことができます。彼は私があなたが使用しているのと同じ創作者のPredicateBuilderです。

Entity Frameworkので問い合わせる場合は、これに最後の行を変更します。

return objectContext.Products.AsExpandable().Where(predicate);

あなたはLINQKIT DLL hereをつかむか、NuGetパッケージhereを通してそれをインストールすることができます。

それは私が解決したので、それは確かにあなたの問題を解決します。

関連する問題