1) У меня есть таблица Product с 4 столбцами: ProductID, Name, Category и Price. Вот обычный linq для запроса этой таблицы.
public ActionResult Index()
{
private ProductDataContext db = new ProductDataContext();
var products = from p in db.Products
where p.Category == "Soccer"
select new ProductInfo { Name = p.Name, Price = p.Price}
return View(products);
}
Где ProductInfo - это просто класс, который содержит 2 свойства (Имя и Цена). Страница индекса наследует ViewPage - IEnumerable - ProductInfo . Все отлично работает
2) Чтобы динамически выполнить вышеуказанный запрос, я делаю это:
Public ActionResult Index()
{
var products =
db.Products
.Where("Category = \"Soccer\"")
.Select(/* WHAT SOULD I WRITE HERE TO SELECT NAME & PRICE?*/)
return View(products);
}
Я использую пространство имен System.Lind.Dynamic и DynamicLibrary.cs (загружено из блога ScottGu).
Вот мои вопросы:
- Какое выражение использовать для выбора только имени и цены?
- (самое главное) Как мне получить данные в моем представлении? (т. е. какой тип ViewPage наследует? ProductInfo?)
===================
EDIT
- Когда я пишу .Select ("new (Name, Price)"), я могу передать объект в свойство Model ViewData. К сожалению, чтобы использовать объект Viewdata, меня попросили привести Viewdata к типу. Но я не знаю, как определить тип для кастинга.
====================
EDIT
Вместо свойства Model в ViewData я использую просто ViewData ["products"]. Чтобы извлечь содержимое, я просто помещаю приведенный выше объект IEnumerable, например:
<% foreach(var item in (IEnumerable)ViewData["products"]){%>
<p><% = Html.Encode(item)%><p>
<%}%>
Есть 2 ситуации:
1) Если я выберу только один столбец (например, Имя), все будет работать нормально.
2) Если я выберу больше 1 столбца (Имя, Цена), я получу что-то вроде этого
{Name=Soccer, Price=19.50}
{Name=Shin Pads, Price=11.59}
Почему я просто не понимаю что-то вроде
Soccer, 19.50
Shin Pads, 11.59
=================================
РЕДАКТИРОВАТЬ 02 апреля - 05:47 AM
Я определил метод GetPropertyValue (как ваши ответные предложения) как статический в статическом классе, который я назвал ' HelperClass '. Теперь я пытаюсь получить доступ к значению Name из моего объекта.
<% = Html.Encode(HelperClass.GetPropertyValue(ViewData["product"], "Name")) %>
Я получаю следующее исключение: «Ссылка на объект не установлена на экземпляр объекта». И следующая строка изнутри GetPropertyValue () его подсветка.
Line 22: return propInfo.GetValue(obj, null);
Нужно ли использовать новое ключевое слово? (Где?)
Спасибо за помощь