10

次のコードがあります。

public void SalesCount(string customerId)
{
  ..
  ..
  return ...;
}

var resultQuery = dataContext.Customers
.Where (c => c.Name == "Alugili")
.Where (c => SalesCount(c.CustomerId) < 100);

resultQuery を実行すると、SQL 例外への変換が発生します。

この問題の回避策はあります?

4

4 に答える 4

12

単にできません。SQL サーバーで C# コードを直接実行することはできません。使用できるのはExpressions、いくつかの特別に認識された関数のみです...

LINQ-to-Objects でクエリを (少なくとも部分的に) 変換しない限り...

var resultQuery = dataContext.Customers
    .Where (c => c.Name == "Alugili")
    .AsEnumerable()
    .Where (c => SalesCount(c.CustomerId) < 100);

最後Whereはクライアント側で実行されるため、多くの無駄な行が DB からフェッチされることに注意してください。

于 2013-09-10T09:12:20.733 に答える
2

試す

var resultQuery = dataContext.Customers
.Where (c => c.Name == "Alugili")
.ToArray()
.Where (c => SalesCount(c.CustomerId) < 100);

しかし、2 つ目Whereは SQL としてではなくローカルで実行されます。「Alugili」という名前のすべての顧客は DB から取得されます...

それ以外の場合は、メソッドをラムダ式として where メソッドに直接記述する必要があります。

于 2013-09-10T09:11:54.753 に答える
-1

2 つの where 条件の間に && を追加します。

于 2013-09-10T09:19:58.710 に答える