【发布时间】:2013-02-11 21:30:57
【问题描述】:
我收到了这个错误,我对导致它的原因非常有信心,但不太确定如何解决它。
我正在使用entity framework code first,并且我的一个实体中有一个外键,我特意将其设置为long?:
public long? ClientId { get; set; }
public virtual Client Client { get; set; }
然后我使用我创建的数据库中的数据来填充DataGridView,问题就来了。我正在通过dgv 的元素使用自定义搜索/过滤,并且此自定义过滤的代码被继承。到目前为止它工作得很好,但是当我尝试使用 ClientID 过滤时,我收到了帖子名称的错误。
我开始调试并看到了这个:
if (property.PropertyType == typeof(string))
{//some code
else if (property.PropertyType == typeof(bool))
{//other code
else if(rule.Data.Equals("1") || rule.Data.ToLower().Equals("true"))
{//again some code
else if (property.PropertyType == typeof(Int32))
{//some code
...
因为我的值是 long? 类型,所以我的代码没有进入以下条件,所以我的代码输入了默认条件:
else
{
long value = 0;
if (long.TryParse(rule.Data, out value))
{..code
根据调试器,解析返回 true,因为我进入了 if 正文,但随后我从上面收到错误,并且 me 属性的类型是 System.Nullable1[System.Int64]。
我有第二个外键,它使用完全相同的逻辑,并且一切正常。我能看到的唯一区别是,对于工作情况,类型是long,对于错误情况,类型是long?。
我想保留long? 类型,但不知道这种情况是否有任何解决方法。
【问题讨论】:
-
那么,您在未向我们展示的代码中收到错误,我理解正确吗?
-
“你看到那个代码”在哪里?方法的目的是什么(方法的名称有助于识别)。另一个非常重要的问题:错误是什么?
-
是的,这个项目很大,所以我试图找出问题所在。如果我不理解,那么我想我将不得不自己做。但是调用此方法的代码是
GridFilterResult<T> result = service.List(gridSettings);。但我认为问题在于我尝试将long?解析为long我试图为long?添加一个特定案例,但似乎不允许解析为long?... -
Leron,请告诉我们错误或异常! :-) 还要发布发生异常的代码。
-
@juharr,我分别不同意。请参阅:stackoverflow.com/questions/7573590/… 了解原因。