0
述語式から汎用型Tを解析し、別の型に変換して変換型を使用して新しい式を作成できますか?式関数:汎用型T述語
私はTからDTO.Companyへの変換を行っています。その後、DTO.CompanyからDAL.Companyへのマッピングを行う必要があります。以下のコード例では変換をしようとしていますが、まずそれが可能であることを知る必要があります。次に、bar変数を設定する前にDTO.CompanyをDAL.Companyに変換する方法を知る必要があります。
// This works!!!! But I want to make it generic as possible!
public T Fetch<T>(Expression<Func<DAL.Company, bool>> predicate) where T : class
{
var typeOfT = typeof(T);
if (typeOfT != typeof(DTO.Company))
{
return null;
}
var companies = _dbContext.Companies.Where(predicate);
var ret = new Collection<DTO.Company>();
foreach (var company in companies)
{
ret.Add(company.ConvertToDataTransferObject());
}
return (T)Convert.ChangeType(ret, typeof(T));
}
// This does not work!!!
public T Fetch<T>(Expression<Func<T, bool>> predicate) where T : class
{
var typeOfT = typeof(T);
if (typeOfT != typeof(DTO.Company))
{
return null;
}
var foo = Expression.Convert(predicate.Body, typeof(bool));
//Below I'm getting Exception thrown: 'System.ArgumentException' in System.Core.dll
//Additional information: ParameterExpression of type 'DTO.Company' cannot be used for delegate parameter of type 'DAL.Company'
var bar = Expression.Lambda<Func<DAL.Company, bool>>(foo, predicate.Parameters);
var companies = _dbContext.Companies.Where(bar);
var ret = new Collection<DTO.Company>();
foreach (var company in companies)
{
ret.Add(company.ConvertToDataTransferObject());
}
return (T)Convert.ChangeType(ret, typeof(T));
}
:それはあなたのために十分である場合http://stackoverflow.com/questions/42902164/how-to-map-expressionfunctentity-bool-to-expressionfunctdbentity-bool/42904029#42904029は見てみましょう – xanatos