首先,为糟糕的问题标题道歉 - 不完全确定我是否在问正确的事情。
通常我可以执行以下操作来访问字段:
MyTables table = dc.MyTables.SingleOrDefault(p => p.id == someId);
somevalue = table.samplefield;
在这个例子中,变量 somevalue 最终会得到字段 samplefield 的值。
现在我有一个场景,我想填充一个变量,但我不知道设计时表字段的名称。但是,我将此字段名称放在字符串中。因此可以使用此字符串获取值吗?
希望这是有道理的!
答案 0 :(得分:6)
您需要使用反射,如下所示:(未经测试)
somevalue = typeof(MyTable).GetProperty(fieldName).GetValue(table, null);
答案 1 :(得分:3)
如果你有string s = "sampleField";
,那么你可以使用反射:
object value = table.GetType().GetProperty(s).GetValue(table, null);
如果您需要将PKID作为字符串,则它更复杂,您需要使用运行时生成的lambda。 完全如何略微依赖于实现 - 例如,要从LINQ-to-SQL中识别PK,请参阅查看数据上下文元数据的this answer。
答案 2 :(得分:3)
奇怪的是,我刚刚在Scott Hanselman的博客上阅读了类似的内容,这是设置字符串中字段名称的位置或排序,但我认为选择可以以相同的方式完成。参见:
核心就像:
Dim Northwind As new NorthwindDataContext
Dim query = Northwind.Products
.Where("CategoryID=2 And UnitPrice>3")
.OrderBy("SupplierID")
GridView1.DataSource = query
GridView1.DataBind()
可能需要一些动态数据引用。
答案 3 :(得分:2)
为此,您需要使用反射。
public object GetField(object obj, string fieldName) {
var t = obj.GetType();
var field = t.GetField(fieldName);
return field.GetValue(obj);
}
somevalue = GetField(table, "someFieldName");
只要该字段是实例和公共字段,这都有效。如果可访问性低于公共值,则需要稍微修改GetField方法调用。
答案 4 :(得分:2)
这绝对可行,但确实变得更复杂。如果你想做一个完全动态的LINQ查询,你应该查看Scott Hanselman的这些帖子。