как вернуть одну строку с помощью TableAdapter - PullRequest
5 голосов
/ 15 января 2010

Привет! В настоящее время я использую TableAdapter, который возвращает dataTable, который можно использовать, когда таблица результатов должна иметь более одной строки, например:

MyItemsDataTable myItemsDataTable = Adapter.GetAllItems();  

но если нам понадобится только одна строка, скажем, элемент с определенным идентификатором

MyItemsDataSet.MyItemRow  itemRow = Adapter.GetItemByID(id)[0];  

как мне сделать так, чтобы Adapter возвращал одну строку вместо DataTable. Я использую мастер DataSet Designer и дает мне два варианта для добавления в оператор SELECT

Use SQL statements -->  Select which return rows
(returns one or many rows)
Use SQL statements -->  Select which returns a single value rows
(returns a single value) 

и используя аналогичный запрос

SELECT * from
FROM  FOOD_ITEMS
WHERE (ITEM_ID = @ITEM_ID)

Нужно ли переопределить этот метод или добавить новый?

public virtual MyItemsDataSet.MyItemsDataTable  GetItemByID(int ITEM_ID)

вероятно что-то вроде

public virtual MyItemsDataSet.MyItemRow GetItemByID(int ITEM_ID)

Если это так, я не могу сделать это в сгенерированном дизайнером файле !! где я могу это сделать?

Спасибо

Ответы [ 2 ]

3 голосов
/ 15 января 2010

Создайте новый оператор Select в конструкторе наборов данных.Используйте Select which return rows.Затем используйте следующий запрос:

SELECT TOP 1 * from 
FROM  FOOD_ITEMS 
WHERE (ITEM_ID = @ITEM_ID)

Сохраните этот метод как GetFirstItemByID() или что-то похожее.


Для гуглеров многие из баз данных не MS (например,MySQL) будет использовать следующий синтаксис:

SELECT * from 
FROM  FOOD_ITEMS 
WHERE (ITEM_ID = @ITEM_ID)
LIMIT 1
2 голосов
/ 15 января 2010

Я считаю, что единственный способ - получить доступ к первой строке таблицы данных через индекс, как вы делаете с этим запросом -

MyItemsDataSet.MyItemRow  itemRow = Adapter.GetItemByID(id)[0];  

Еще одна вещь, которую вы должны рассмотреть, - это дамп адаптеров таблиц и использование LINQ2SQL вместо этого. LINQ поддерживает метод .FIRST (), который делает именно то, что вы хотите.

...