インターフェースがあるとしましょう:
public interface ISystemCompany
{
Guid SystemCompanyId { get; set; }
}
IQueryable<>
を実装する of 型もありますISystemCompany
。
特定の SystemCompanyId 値があります。432486bc-95f2-e111-be6e-74de2b99e249
このフィールドの値で IQueryable をフィルタリングする関数を書きたいと思います。これはそのような関数の例です:
public IQueryable FilterByValue(IQueryable listToFilter, Guid valueToFilter)
{
var parameter = Expression.Parameter(typeof(object));
// item
var converted = Expression.Convert(parameter, typeof(ISystemCompany));
// (ISystemCompany)item
var member = Expression.Property(converted, "SystemCompanyId");
// ((ISystemCompany)item).SystemCompanyId
var comparison = Expression.Equal(member, Expression.Constant(valueToFilter));
// ((ISystemCompany)item).SystemCompanyId == valueToFilter
var expression = Expression.Lambda<Func<object, bool>>(comparison, new[] { parameter } );
//item => ((ISystemCompany)item).SystemCompanyId == valueToFilter
return ((IQueryable<object>)listToFilter).Where(expression);
// listToFilter.Where(((ISystemCompany)item).SystemCompanyId == valueToFilter)
}
この関数は遅延実行をサポートしていないため、Entity Framework では機能しません。このサポートを導入するにはどうすれば改善できますか?