Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQLite.Net OrderBy函数返回空引用异常 站台: Windows 8.1通用 之前请参见下面的编辑 当前 工作_C#_Sqlite_Sqlite Net_Sqlite Net Extensions - Fatal编程技术网

C# SQLite.Net OrderBy函数返回空引用异常 站台: Windows 8.1通用 之前请参见下面的编辑 当前 工作

C# SQLite.Net OrderBy函数返回空引用异常 站台: Windows 8.1通用 之前请参见下面的编辑 当前 工作,c#,sqlite,sqlite-net,sqlite-net-extensions,C#,Sqlite,Sqlite Net,Sqlite Net Extensions,我有一张桌子 public class CommandData { [PrimaryKey, AutoIncrement] [Column("Id")] public Guid Id { get; set; } [Column("TimeStamp")] public DateTime TimeStamp { get; set; } } 零钱 但是,SQLite将日期时间返回为未指定,并将其视为本地;我必须将表更改为始终返回UTC时间(我还尝试了Dat

我有一张桌子

public class CommandData
{
    [PrimaryKey, AutoIncrement]
    [Column("Id")]
    public Guid Id { get; set; }

    [Column("TimeStamp")]
    public DateTime TimeStamp { get; set; }
}
零钱 但是,SQLite将
日期时间
返回为
未指定
,并将其视为本地;我必须将表更改为始终返回UTC时间(我还尝试了DateTime.SpecifyKind(this.TimeStampStore,DateTimeKind.UTC),其中TimeStampStore的类型为DateTime):

这一变化打破了以下局面:

SQLite.SQLiteConnection.Table<CommandData>().OrderBy(x=>x.TimeStamp) 
propertyName
是“时间戳”,但是

列[]。PropertyName
是“时间戳存储”

列[]。名称
为“时间戳”

因此,
FindColumnWithPropertyName
返回一个
null

可能的修复 如果我更改SQLite.cs的
AddOrderBy
函数:

Table.FindColumnWithPropertyName(mem.Member.Name).Name 

然后我的代码工作

但我宁愿猜测我做错了什么,因为这段代码是由比我更有经验的人编写的(特别是因为我找不到相关的帖子)

问题: 我的设置有问题吗?我读写都很好,但这件事让我很头疼

多谢各位

编辑 我实施了可能的修复(更改函数
AddOrderBy
),解决了我的问题

使用我移动到的,它产生了完全相同的问题

在SQLite.Net.TableQuery1.AddOrderBy[TValue](表达式1 orderExpr,布尔asc)

在SQLite.Net.TableQuery1.OrderBy[TValue](表达式1 orderExpr)

但现在我无法应用以前的修复程序,因为我不再提供.cs文件(现在是.dll)


有什么想法吗?

可能是我,但我不太确定你想达到什么目的。你能详细说明一下吗?@Barptad应用程序非常简单:从数据库中获取按时间戳排序的项目。有多种方法可以做到这一点;最简单的方法可能是将它们读出到实现
IEnumerable
接口的任何东西,然后使用Linq来
OrderBy
它们。然而,应用程序不是问题所在,而是我的SQLite实现不起作用。我遇到过类似的SQLite和DateTime问题。正如您刚才所说,我最终进行了一个查询来选择对象,然后对结果使用Linq执行OrderBy。虽然现在可能有点晚了,但我发现当我必须处理SQLite时,SQLiteNetExtensions Nuget包非常有用。它基于slite net,可以非常方便地设置关系和执行大多数标准操作。这可以帮助其他到达这里的人,我在使用.OrderBy(x=>x.Y)时遇到了这个问题,其中Y是有效属性,但标记为[Ignore],因此它不是有效列。
 private TableQuery<T> AddOrderBy<U> (Expression<Func<T, U>> orderExpr, bool asc)
 {
     ...
                var q = Clone<T> ();
                if (q._orderBys == null) {
                    q._orderBys = new List<Ordering> ();
                }
                q._orderBys.Add (new Ordering {
                    ColumnName = Table.FindColumnWithPropertyName(mem.Member.Name).Name,
                    Ascending = asc
                });
                return q;
 }

 public Column FindColumnWithPropertyName (string propertyName)
 {
     var exact = Columns.FirstOrDefault (c => c.PropertyName == propertyName);
     return exact;
 }
Table.FindColumnWithPropertyName(mem.Member.Name).Name 
Table.FindColumn(mem.Member.Name).Name