【问题标题】:LINQ asp.net page against MS Access .针对 MS Access 的 LINQ asp.net 页面。
【发布时间】:2010-09-16 17:01:41
【问题描述】:

我有一个使用 ADO 来查询 MS 访问数据库的 ASP.Net 页面,作为学习练习,我想结合 LINQ。我有一个简单的表格,叫做 Quotes。

这些字段是:QuoteID、QuoteDescription、QuoteAuthor、QuoteDate。我想运行简单的查询,例如“给我 1995 年之后的所有报价”。

我如何将 LINQ 合并到这个 ASP.Net 站点 (C#)

基本上,我的问题是 LINQ 是否适用于 MS Access ??

【问题讨论】:

标签: c# asp.net linq ms-access


【解决方案1】:

LINQ to SQL 不支持 Access(即,没有用于 LINQ 的 Access/Jet 提供程序),但您可以使用 LINQ 查询数据集。这意味着您使用数据库中可能需要在结果中的任何可能数据填充 DataSet,然后在客户端进行过滤。在你有一个类型化的 DataSet 并使用 TableAdapter 填充()它之后,你可以这样做:

var year = 1995;  // you can pass the year into a method so you can filter on any year
var results = from row in dsQuotes
              where row.QuoteDate > year
              select row;

你必须决定这是否值得。您必须用 all 引号填充 DataSet,然后使用 LINQ 过滤 1995 年之后的那些引号。对于少量数据,当然,为什么不呢?但是对于非常大量的数据,您需要确保它不会太慢。

但是,如果您使用的是 DataSet,您可以编写自定义查询,这些查询将成为新的 TableAdapter 方法。因此,您可以将查询的正确 SQL 放入 TableAdapter 中的 FillByYear() 方法中,并使用它来填充您键入的 DataTable。这样,您只能取回您需要的数据。

如果你走这条路,请记住 Access/Jet 使用位置参数,而不是命名参数。所以不是

SELECT * FROM Quotes WHERE Year(QuoteDate) > @Year

你会使用这样的东西:

SELECT * FROM Quotes WHERE Year(QuoteDate) > ?

【讨论】:

    【解决方案2】:

    我不认为 LINQ to SQL 支持 Access。但是,如果您的表足够小以适合内存,LINQ to DataSet 将让您非常轻松地查询数据表等 - 尤其是强类型数据集。

    【讨论】:

    • 你能解释一下你所说的 LINQ to DataSet 是什么意思吗?现在在我的查询中我查询到一个数据表
    • LINQ to DataSet 基本上是DataSet 和DataTable 上的一组扩展方法。这个想法是能够对您已经从数据库中获取的数据执行查询。请参阅danielmoth.com/Blog/2007/07/linq-to-dataset.html 了解更多信息。
    • 你们的意思不是“访问”——你的意思是 JET。
    最近更新 更多