C# 为什么LINQPAD假设这个变量是System.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

我正在尝试优化一个查询,所以我将其插入到LINQPAD中,但我不断得到一个空引用错误,无法将空值分配给System.Int32。。当我在最后注释掉FolderID时,错误不再发生。为什么假定FolderID是System.Int32,如何将其设置为Int32?这样它就可以为空,我就可以运行查询了

(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应该是什么