2

インターフェースがあるとしましょう:

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 では機能しません。このサポートを導入するにはどうすれば改善できますか?

4

0 に答える 0