System.Linq与System.Data.SQLite不兼容

时间:2018-03-06 14:59:47

标签: c# .net visual-studio linq sqlite

我有一个使用System.Data.OleDb的简单的双层C#解决方案,它可以正常工作(除了对可能的SQL命令非常恼人的限制)。

  • 上层项目 - >调用来自下层项目的方法的用户应用程序
  • 下层项目 - >访问数据库的类库

现在我试图转移到System.Data.SQLite,开始发生一些非常奇怪的事情。

我以前在上层有很多IEnuberable<T>.ToList()方法,来自System.Linq(完全独立于SQLite,在添加SQLite包之前就已存在)。

现在所有这些ToList()方法都会给我以下错误,这对我没有任何意义,因为这些SQLiteDataReader个实例中绝对没有IEnumerable<LotsOfTypes>:< / p>

  

错误CS0012类型&#39; SQLiteDataReader&#39;在未引用的程序集中定义。您必须添加对程序集的引用,System.Data.SQLite,Version = 1.0.108.0,Culture = neutral,PublicKeyToken = db937bc2d44ff139&#39;。

这里发生了什么?我该如何解决这个问题?难道不能简单地识别System.Linq的方法吗?我真的不需要在上层引用SQLite程序集,因为它不访问数据库。

使用示例

string[] projectLines = ....;
List<ProjectOld> oldProjects;
IEnumerable<ProjectOld> old  = projectLines.Select(line => new ProjectOld(line));
oldProjects = old.ToList(); //error here!!!

更新

我实际上有自己定义的扩展方法SQLiteDataReader.ToList(),如果我更改此方法的名称,则错误消失:

public static class DBReaderExtensionsSQLite
{
    /// <summary>
    /// returns a list with the items of type T and closes the reader 
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="reader"></param>
    /// <returns></returns>
    public static List<T> ToList<T>(this SQLiteDataReader reader) where T : IDataItem, new()
    {
        List<T> list = new List<T>();

        if (!reader.HasRows)
            return list;

        while (reader.Read())
        {
            T item = new T();
            item.Populate(reader);
            list.Add(item);
        }

        reader.Close();
        return list;
    }

但是,这里仍然存在一些错误,因为我使用OleDbDataReader这个方法并没有发生任何错误:

public static class DBReaderExtensions
{
    /// <summary>
    /// returns a list with the items of type T and closes the reader 
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="reader"></param>
    /// <returns></returns>
    public static List<T> ToList<T>(this OleDbDataReader reader) where T : IDataItem, new()
    {
        List<T> list = new List<T>();

        if (!reader.HasRows)
            return list;

        while (reader.Read())
        {
            T item = new T();
            item.Populate(reader);
            list.Add(item);
        }

        reader.Close();
        return list;
    }

为什么只有SQLiteDataReader而不是OleDbDataReader ??

才会发生这种情况

0 个答案:

没有答案