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

使用实体框架在运行时动态选择列分享

时间:2023-04-10 20:56:44 C#

使用实体框架在运行时动态选择列+sCol+"fromTableNamewhereID="+iId;//执行查询并返回列sCol中的值}该表有四列存储整数值,我使用上述函数分别读取它们。现在我将它转换为实体框架。publicintsFunc(stringsCol,intiId){returnConvert.ToInt32(TableRepository.Entities.Where(x=>x.ID==iId).Select(x=>sCol).FirstOrDefault());但是上面的函数返回错误Inputstringisnotwell-formed因为它返回的是列名本身。我不知道如何解决这个问题,因为我是EF的新手。任何帮助将不胜感激感谢这可能有助于解决您的问题:publicintsFunc(stringsCol,intiId){var_tableRepository=TableRepository.Entities.Where(x=>x.ID==iId).Select(e=>e).FirstOrDefault();如果(_tableRepository==null)返回0;var_value=_tableRepository.GetType().GetProperties().Where(a=>a.Name==sCol).Select(p=>p.GetValue(_tableRepository,null)).FirstOrDefault();返回_value!=null?Convert.ToInt32(_value.ToString()):0;此方法现在适用于动态输入法参数sCol。您必须尝试使用??动态LINQ。详情在这里你可以这样做:varentity=_dbContext.Find(YourEntity,entityKey);//查找列以选择或更新PropertyInfopropertyInfo=entity.GetType().GetProperty("TheColumnVariable");您可以使用反射,就像这样(没有经过测试的代码):vartype=typeof(行);varpropInfo=type.GetProperty(sCol);if(propInfo!=null){stringvalue=(string)propInfo.GetValue(row);返回值;}返回空值;不要将字符串列名作为参数传递,而是尝试传递一个lambda表达式,例如:sFunc(x=>x.FirstColumnName,rowId);sFunc(x=>x.SecondColumnName,rowId);...这最终将为您提供列名的智能感知,因此如果列名输入错误,您可以避免可能出现的错误。更多信息:C#PassingLambdaexpressionsasmethodparameters但是如果你必须保持相同的方法签名,即支持其他/遗留代码,那么你可以试试这个:publicstringsFunc(stringsCol,intiId){returnTableRepository.Entities.Where(x=>x.ID==iId).Select(x=>(string)x.GetType().GetProperty(sCol).GetValue(x)});你可能需要一些调整,我没有快速的方法来测试它。以上就是C#学习教程:使用实体框架在运行时动态选择列的全部内容分享。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: