针对MS Access的LINQ asp.net页面。

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

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

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

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

LINQ to SQL不支持Access(即LINQ没有Access / Jet提供程序),但您可以使用LINQ查询DataSet。 这意味着您使用数据库中可能需要的任何可能数据填充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; 

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

但是,如果您正在使用DataSet,则可以编写成为新的TableAdapter方法的自定义查询。 因此,您可以在TableAdapter中的FillByYear()方法中为查询添加正确的SQL,并使用它来填充您键入的DataTable。 这样你就只能获得所需的数据。

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

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

你会用这样的东西:

 SELECT * FROM Quotes WHERE Year(QuoteDate) > ? 

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