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

如何根据动态字段名引用Linq中的字段Share

时间:2023-04-10 23:46:35 C#

如何根据动态字段名在Linq中引用字段正确的事。通常我可以执行以下操作来访问字段:MyTablestable=dc.MyTables.SingleOrDefault(p=>p.id==someId);somevalue=table.samplefield;在这种情况下,变量somevalue将以字段samplefield值结尾。现在我有一个场景,我想填充一个变量,但在设计时我不知道表字段的名称。但是,我确实在字符串中包含了这个字段名称。那么是不是可以用这个字符串来取值呢?希望这是有道理的!您需要使用反射,如下所示:(untested)somevalue=typeof(MyTable).GetProperty(fieldName).GetValue(table,null);如果你有strings="sampleField";,然后你可以使用反射:objectvalue=table.GetType().GetProperty(s).GetValue(table,null);如果您需要PKID作为字符串,它会更复杂,您需要使用在运行时生成的lambda。具体如何取决于实施-例如从LINQ-to-SQL识别PK,请参阅这个查看数据上下文元数据的答案。奇怪的是,我刚刚在ScottHanselman的博客上读到类似的东西,它正在设置字符串中字段名称的位置或顺序,但我认为选择可以用同样的方式完成。参见:http://www.hanselman.com/blog/TheWeeklySourceCode48DynamicQueryableMakesCustomLINQExpressionsEasier.aspx核心是这样的:DimNorthwindAsnewNorthwindDataContextDimquery=Northwind.Products.Where("CategoryID=2AndUnitPrice>3").OrderBy("SupplierID")GridView1.DataSource=queryGridView1.DataBind()它可能需要一些动态数据引用。为此,您需要使用反射。publicobjectGetField(objectobj,stringfieldName){vart=obj.GetType();varfield=t.GetField(fieldName);返回字段.GetValue(obj);}somevalue=GetField(table,"someFieldName");只要字段是实例和公共的,这就有效。如果可访问性低于公共,则需要稍微修改GetField方法调用。它确实有效,但它确实变得更加复杂。如果您想执行完全动态的LINQ查询,您应该查看ScottHanselman的这些帖子。以上就是C#学习教程:如何根据动态字段名引用Linq中字段共享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文来自网络收藏,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: