Как я ссылаюсь на поле в Linq на основе динамического имени поля

Во-первых, извинения за плохой заголовок вопроса - не совсем уверенный, если я спрашиваю корректную вещь.

Обычно я могу сделать следующее для доступа к полю:

MyTables table = dc.MyTables.SingleOrDefault(p => p.id == someId);
somevalue = table.samplefield;

В этом экземпляре переменная somevalue закончила бы тем, что имела значение поля samplefield.

Теперь у меня есть сценарий, где я хочу заполнить переменную, но я не знаю название поля таблицы во время проектирования. Я делаю однако, имею это имя поля в строке. Поэтому возможно выбрать значение с помощью этой строки?

Надеясь это имеет смысл!

7
задан Martin 27 January 2010 в 15:52
поделиться

5 ответов

Вам нужно использовать отражение, как это: (непроверенный)

somevalue = typeof(MyTable).GetProperty(fieldName).GetValue(table, null);
6
ответ дан 6 December 2019 в 12:50
поделиться

Для этого вам нужно будет использовать отражение.

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 немного, если доступность была меньше общего.

2
ответ дан 6 December 2019 в 12:50
поделиться

Это определенно выполняется, но становится еще более сложный. Если вы хотите сделать полностью динамичный запрос LINQ, вы должны проверить эти сообщения от Скотта Хансельмана.

2
ответ дан 6 December 2019 в 12:50
поделиться

Если у вас есть строка S = «образец поля»; ; , тогда вы можете просто использовать отражение:

object value = table.GetType().GetProperty(s).GetValue(table, null);

, если вам нужен PKID как строка, это сложнее И вам нужно использовать временную среду, порожденную лямбда. Точно Как слегка зависит от реализации - например, для идентификации PK из Linq-to-SQL см. , который рассматривает этот ответ , который смотрит на метаданные контекста данных.

3
ответ дан 6 December 2019 в 12:50
поделиться

Странно, что я только что читал что-то похожее на блоге Скотта Хансельмана, это должно устанавливать где или заказывать на имя поля в строке, но я думаю, что выбор может быть сделан таким же образом. Отказ См.:

http://www.hanselman.com/blog/theweeklysourcecode48dynamicqueryableMakescustomlinqueryablemakescustomlinqExpressionsiver.aspx

Ядро, являющееся чем-то вроде:

Dim Northwind As new NorthwindDataContext
Dim query = Northwind.Products
        .Where("CategoryID=2 And UnitPrice>3")
        .OrderBy("SupplierID")
GridView1.DataSource = query
GridView1.DataBind()

Это может потребовать некоторых динамических данных.

3
ответ дан 6 December 2019 в 12:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: