how to return single row using TableAdapter

Asad picture Asad · Jan 15, 2010 · Viewed 11.2k times · Source

Hi I am currently using TableAdapter that returns a dataTable, which is fine to use when result table should have more than one row like :

MyItemsDataTable myItemsDataTable = Adapter.GetAllItems();  

but if we need only one row as a result, say an item, which has a particular ID

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

how can I make Adapter to return one row instead of DataTable. I am using DataSet Designer wizard and gives me two options for putting in SELECT statement

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) 

and using similar query

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

Do I need to override this method or add a new one ?

public virtual MyItemsDataSet.MyItemsDataTable  GetItemByID(int ITEM_ID)

probably something like

public virtual MyItemsDataSet.MyItemRow GetItemByID(int ITEM_ID)

If so, I cannot do it in designer generated file !! where can I do this ?

Thanks

Answer

Craig Schwarze picture Craig Schwarze · Jan 15, 2010

I believe the only way is to access the first row in the data table via an index, as you are doing with this query -

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

Another thing you should consider is dumping table adapters and using LINQ2SQL instead. LINQ supports the .FIRST() method, which does precisely what you want.