我正在为Linq-to-sql
构建表达式树。在一些表格的数据库中,相关列存储为string
,而其中一些存储为Guid
。我已经通过用Expression.Convert(Expression.Constant(search.PolicyNumber), policyNumberColumnLambda.Type)
(其中PolicyNumber
有时是nullable
)包装lambda常量来解决类似的问题,其中int
和int?
工作得很好。但它不明显地转换为Guid
到string
转换。类型'System.Guid'和'System.String'之间没有强制运算符定义
代码看起来如下:
public static IQueryable<IRetrieveGuid> SearchByRetrieveGuid<IRetrieveGuid>(this IQueryable<IRetrieveGuid> queryable, SearchModel search)
{
var paramLambda = Expression.Parameter(typeof(IRetrieveGuid));
var columnLambda = Expression.Property(paramLambda, "retrieveguid");
var lambda = Expression.Lambda<Func<IRetrieveGuid, bool>>(
Expression.Equal(columnLambda, Expression.Convert(Expression.Constant(search.RetrieveGuid), columnLambda.Type)), paramLambda);
return queryable.Where(lambda);
}
如何转换类型的表达式目录树相匹配?
所以数据库列是一个GUID?为什么不把它作为一个quid并将其转换为linq-to-objects中的字符串? –
@DStanley在某些表中它是GUID,而在某些字符串中。我正在通过接口来编写一个面向方面的东西来查询大规模混乱的数据库(MSSQL和Oracle),并且我正在使用的接口是'Interface {T Property}',所以我不知道类型是事先(这可能解释它: )http://stackoverflow.com/questions/37812584/putting-interface-behind-properties-with-same-name-but-different-types) –