C# 为什么LINQPAD假设这个变量是System.Int32,我如何改变它的想法?
我正在尝试优化一个查询,所以我将其插入到LINQPAD中,但我不断得到一个空引用错误,无法将空值分配给System.Int32。。当我在最后注释掉FolderID时,错误不再发生。为什么假定FolderID是System.Int32,如何将其设置为Int32?这样它就可以为空,我就可以运行查询了C# 为什么LINQPAD假设这个变量是System.Int32,我如何改变它的想法?,c#,linq-to-sql,linqpad,C#,Linq To Sql,Linqpad,我正在尝试优化一个查询,所以我将其插入到LINQPAD中,但我不断得到一个空引用错误,无法将空值分配给System.Int32。。当我在最后注释掉FolderID时,错误不再发生。为什么假定FolderID是System.Int32,如何将其设置为Int32?这样它就可以为空,我就可以运行查询了 (from groupBundle in GroupBundles join userGroup in UserGroups on groupBundle.GroupID equals user
(from groupBundle in GroupBundles
join userGroup in UserGroups on groupBundle.GroupID equals userGroup.GroupID
join bundle in Bundles on groupBundle.BundleID equals bundle.BundleID
where userGroup.UserID == 75
orderby bundle.BundleName
select new
{
BundleID = bundle.BundleID,
BundleName = bundle.BundleName,
BundleIcon = bundle.BundleIcon,
UseSpecialPlayer = (bundle.UseSpecialPlayer != null && bundle.UseSpecialPlayer == true) ? true : false,
height = bundle.PuHeight,
width = bundle.PuWidth,
UserID = 75,
CompanyID = 32,
IsFavorite = ((from f in Favorites where f.FavoriteTypeID == 1 && f.UserID == 75 && f.ActionID == bundle.BundleID select f).Count() > 0) ? true : false,
//THIS ONE HERE
FolderID = (from cf in CategoryFolders
join folder in Folders on cf.FolderID equals folder.FolderID
where folder.CompanyID == 32 &&
cf.CategoryID == bundle.BundleID
select cf.FolderID).FirstOrDefault()
}).Distinct()
将强制转换为nullable int添加到要指定的表达式:
FolderID = (int?)(from cf in CategoryFolders
FolderID在数据库中可以为null吗?如果不是,这就解释了。我假设FolderId在某个数据库中,我猜它被声明为可为null的类型,甚至可能是可为null的Int列。很抱歉,我不能将其作为注释发布,但仅查询它就行了吗
//THIS ONE HERE
FolderID = (from cf in CategoryFolders
join folder in Folders on cf.FolderID equals folder.FolderID
where folder.CompanyID == 32 &&
cf.CategoryID == bundle.BundleID
select cf.FolderID).FirstOrDefault()
我不确定FolderID是否在数据库中,因为我在这里声明了一个新对象。。。我不知道它将从何处引用。啊哈,这起作用了,并将让我继续我的任务,谢谢,仍然想知道它在何处做出这个假设,它是否基于我在子查询中选择的内容?因为显然FolderID没有在任何地方定义。是的,您正在选择一个新的匿名对象。但您可以从“类别文件夹中的cf”中选择它。那么什么是IQueryable源“CategoryFolders”。Linq到SQL数据源,是吗?然后在数据库中定义它,该字段的类型决定了Linq to SQL在代码中对对象字段使用的类型。你试过演员阵容了吗?成功了吗?是的,演员阵容成功了,谢谢,是的,CategoryFolder.FolderID是不可为空的,这就解释了!我的想法是错误的。您可能希望将强制转换移到select子句中的子查询中,以便它返回
int?
。否则,FirstOrDefault()
将强制它首先成为0
,并且总是在它有机会成为null
之前。如果你投了反对票,请评论。。。不知道为什么这是一个糟糕的问题,只是不知道LINQPAD从哪里得到这个变量的想法,因为它只是一个正在动态创建的新对象。。。对吧?我并没有投反对票,但你肯定可以大大简化你的例子。它不仅不必要地复杂,而且不完整——什么是用户组?什么是包?涉及哪些类型?一个简短但完整的示例会更容易使用。是的,我明白了,但我只想包括所有内容,因为我不知道是什么原因导致事情假定FolderId类型应该是什么,现在他们已经向我指出了,我知道你是对的,我只需要最后一部分,我只是不知道是什么决定了FolderID应该是什么