6

嗨,我目前正在使用返回 dataTable 的 TableAdapter,当结果表应该有不止一行时可以使用,例如:

MyItemsDataTable myItemsDataTable = Adapter.GetAllItems();  

但是如果我们只需要一行结果,比如说一个项目,它有一个特定的 ID

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

如何使适配器返回一行而不是 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)

如果是这样,我不能在设计器生成的文件中这样做!我在哪里可以做到这一点?

谢谢

4

2 回答 2

3

我相信唯一的方法是通过索引访问数据表中的第一行,就像您对这个查询所做的那样 -

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

您应该考虑的另一件事是转储表适配器并改用 LINQ2SQL。LINQ 支持 .FIRST() 方法,这正是您想要的。

于 2010-01-15T15:22:48.300 回答
3

Create a new Select statement in the Dataset Designer. Use Select which return rows. Then use the following query:

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

Save this method as GetFirstItemByID() or something similar.


For the googlers out there, many of the non-MS databases (eg. MySQL) will use the following syntax instead:

SELECT * from 
FROM  FOOD_ITEMS 
WHERE (ITEM_ID = @ITEM_ID)
LIMIT 1
于 2010-01-15T15:27:11.257 回答