0
私はおそらく間違った方法でクエリを起動しています。これはSql Serverバックエンドを使用したEF6です。私はSelect('sdfsdf', o => o.Category == 'Save Pewdiepie')
でそれを呼び出すと、私はそれは、SQLでwhere
句を置くことを期待DatabaseContext.Set <T> Sqlのwhere句を使用していません
public IEnumerable<T> Select(string sessionId, Func<T, bool> predicate = null)
{
using (var databaseContext = new DatabaseContext())
{
var list = databaseContext.Set<T>().Where(predicate ?? (x => true)).AsQueryable<T>().ToList();
list.ForEach(o => o.SessionId = sessionId);
return list;
}
}
、しかし、それはありませんwhere
句で私にこれを与える::私が持っている
SELECT
[Extent1].[Id] AS [Id],
[Extent1].[ClientId] AS [ClientId],
[Extent1].[Version] AS [Version],
[Extent1].[ReferenceNumber] AS [ReferenceNumber],
[Extent1].[RealExpirationDate] AS [RealExpirationDate],
[Extent1].[BusinessEffectiveDate] AS [BusinessEffectiveDate],
[Extent1].[BusinessExpirationDate] AS [BusinessExpirationDate],
[Extent1].[IsSuspended] AS [IsSuspended],
[Extent1].[RealEffectiveDate] AS [RealEffectiveDate],
[Extent1].[User] AS [User],
[Extent1].[Category] AS [Category]
FROM [dbo].[YouTube] AS [Extent1]
これが起こっています大きなテーブルでは大きな問題になります。 where
節を作成するにはどうすれば変更できますか?
ほとんどEFの投稿 - http://stackoverflow.com/questions/42585640/entity-framework-lambda-predicate-stored- in-var-with-association)である。 'Func <...>'を 'Expression>' –
@IvanStoevに変更します。署名を変更したくない場合は、どのように式に述語をラップできますか? – toddmo
できません。 'Expression>'は 'Compile'メソッドを使って' Func <...> 'に変換できますが、逆もできません。これは、 'Expression'がより抽象的(式ツリー)なので、これをコード、文字列、またはあなたのケースではSQLに変換することができます。 'Func'は単なる実行可能なコードです。 –