Во-первых, извинения за плохой заголовок вопроса - не совсем уверенный, если я спрашиваю корректную вещь.
Обычно я могу сделать следующее для доступа к полю:
MyTables table = dc.MyTables.SingleOrDefault(p => p.id == someId);
somevalue = table.samplefield;
В этом экземпляре переменная somevalue закончила бы тем, что имела значение поля samplefield.
Теперь у меня есть сценарий, где я хочу заполнить переменную, но я не знаю название поля таблицы во время проектирования. Я делаю однако, имею это имя поля в строке. Поэтому возможно выбрать значение с помощью этой строки?
Надеясь это имеет смысл!
Вам нужно использовать отражение, как это: (непроверенный)
somevalue = typeof(MyTable).GetProperty(fieldName).GetValue(table, null);
Для этого вам нужно будет использовать отражение.
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 Shall немного, если доступность была меньше общего.
Это определенно выполняется, но становится еще более сложный. Если вы хотите сделать полностью динамичный запрос LINQ, вы должны проверить эти сообщения от Скотта Хансельмана.
Если у вас есть строка S = «образец поля»;
; , тогда вы можете просто использовать отражение:
object value = table.GetType().GetProperty(s).GetValue(table, null);
, если вам нужен PKID как строка, это сложнее И вам нужно использовать временную среду, порожденную лямбда. Точно Как слегка зависит от реализации - например, для идентификации PK из Linq-to-SQL см. , который рассматривает этот ответ , который смотрит на метаданные контекста данных.
Странно, что я только что читал что-то похожее на блоге Скотта Хансельмана, это должно устанавливать где или заказывать на имя поля в строке, но я думаю, что выбор может быть сделан таким же образом. Отказ См.:
Ядро, являющееся чем-то вроде:
Dim Northwind As new NorthwindDataContext
Dim query = Northwind.Products
.Where("CategoryID=2 And UnitPrice>3")
.OrderBy("SupplierID")
GridView1.DataSource = query
GridView1.DataBind()
Это может потребовать некоторых динамических данных.