当前位置: 首页 > 编程语言 > C#

DynamicLINQ中使用Contains时如何动态类型Casttostring?

时间:2023-04-11 11:46:10 C#

在DynamicLINQ中使用Contains时如何动态类型Casttostring?我想使用动态LINQ查询在一个类的所有属性中搜索一些文本。我正在使用以下函数来创建表达式。我将属性名称和搜索文本传递给该方法。在那个方法中,如果属性类型是String那么它工作正常。如果属性类型是int、DateTime、GUID。然后它不起作用。我们知道Contains方法只用于元素数组或字符串。我认为应该将属性的值输入到字符串中。那我们该怎么办呢?带有解释的解决方案已完成。我收集了这段代码。publicstaticExpressionContainsExp(stringpropertyName,stringcontains){varparameterExp=Expression.Parameter(typeof(T),"type");varpropertyExp=Expression.Property(parameterExp,propertyName);MethodInfomethod=typeof(string).GetMethod("Contains",new[]{typeof(string)});varsomeValue=Expression.Constant(contains,typeof(string));varcontainsMethodExp=Expression.Call(propertyExp,method,someValue);返回表达式.Lambda(containsMethodExp,parameterExp);嗯,您可能知道在linq中使用ToString()是不可能的。那么接下来的问题就是:如何将其他类型转换为字符串。对于数值,你有SqlFunctions.StringConvert,但它只有double?重载加倍?和小数?对于DateTime,您可以在DateTime上应用SqlFunctions.StringConvert后使用SqlFunctions.StringConvert找到一些东西(这可能意味着至少调用SqlFunctions.DatePart、Year、Month、Day3次)对于Guid,我认为没有办法直接这样做。一种方式(在数据库级别,如果您使用SqlServer)可能是计算列。计算列可以存储GUID的varchar转换表示形式。也许有更好的方法。无论如何,这里至少有一个适用于整数和字符串的示例:以上是C#学习教程:HowtodynamicallytypeCasttostringwhenusingContainsinDynamicLINQ?如果分享的内容对你有用,需要了解更多C#学习教程,希望大家多多关注——publicstaticExpression>ContainsExp(stringpropertyName,stringcontains){//首先,获取类型你的财产varpropertyType=typeof(T).GetProperty(propertyName).PropertyType;//不变varparameterExp=Expression.Parameter(typeof(T),"type");表达式propertyExp=Expression.Property(parameterExp,propertyName);//ifproperty'stypeisintif(propertyType==typeof(int)){//将您的表达式转换为可为空的双精度数(或可为空的十进制),//以便您可以使用SqlFunctions.StringConvertpropertyExp=Expression.Convert(propertyExp,类型(双?));//获取可空双精度的SqlFunctions.StringConvert方法varstringConvertMethod=typeof(SqlFunctions).GetMethod("StringConvert",new[]{typeof(double?)});//在转换后的表达式上调用StringConvertpropertyExp=Expression.Call(stringConvertMethod,propertyExp);}//没有变化varmethod=typeof(string).GetMethod("Contains",new[]{typeof(string)});varsomeValue=Expression.Constant(contains,typeof(string));varcontainsMethodExp=Expression.Call(propertyExp,method,someValue);returnExpression.Lambda>(containsMethodExp,parameterExp);}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。转载请注明出处: