C# LINQ错误检索附加列值时列无效

C# LINQ错误检索附加列值时列无效,c#,sql-server,linq,exception,C#,Sql Server,Linq,Exception,我有以下LINQ查询 // Query the database IEnumerable<BestSeller> best_sellers = from bs in (db.smd_group) where bs.COMPANY == "SMD Textiles" where bs.DOCDATE

我有以下LINQ查询

    // Query the database
    IEnumerable<BestSeller> best_sellers = from bs in (db.smd_group)
                                           where bs.COMPANY == "SMD Textiles"
                                           where bs.DOCDATE > six_months_back
                                           where bs.CUSREF == customer.customer_ref
                                           group bs by bs.PRODCODE into g
                                           orderby g.Sum(x => x.MQTY) descending
                                           select new BestSeller()
                                           {
                                               product_code = g.Key.Trim(),
                                               total_quantity = Convert.ToString(g.Sum(x => x.MQTY)),
                                               // ERROR Occurs when the following line is removed
                                               //product_description = g.First().prd_prddes
                                           };

    // Get the top 25 products
    top25 = best_sellers.Take(25);
“prd_prddes”是包含我们产品说明的列的名称

然而,当我将这一行添加到我的查询中时,我得到了一个奇怪的错误:

列名“PRODCODE”无效

列名“PRODCODE”无效

列名“PRODCODE”无效

描述:在执行过程中发生未处理的异常 当前的web请求。请查看堆栈跟踪以了解更多信息 有关错误的信息及其在代码中的来源

异常详细信息:System.Data.SqlClient.SqlException:无效列 名称“PRODCODE”。列名“PRODCODE”无效。无效的列名 “产品代码”

列名PRODCODE显然不是无效的,因为如果我删除
product\u description
行,它就可以正常工作


这是非常奇怪的…

它看起来像是
g
中的任何东西都没有一个名为
'PRODCODE'


就我个人而言,我要做的是,在select语句中选择
g
,然后做一个断点并使用调试器查看其中的内容

您是否检查了所有
PRODCODE
结果是否有效?听起来可能是空的或空的。这意味着您仍然可以按它分组,但一旦您尝试选择它,它就会抛出该错误

试试这个:

product_description = g.FirstOrDefault() == null 
    ? g.FirstOrDefault().prd_prddes  
    : "Empty";

如果第一项为空,它将后退并显示“Empty”。但是,我不确定第一项是否为空,因此它可能无法工作…

您如何知道
PRODCODE
“显然不是无效的”?我在你的代码中没有看到它(我看到了PRODCODE2),我确信当它抛出错误时,代码没有撒谎。。。是什么类型的
bs
?哎呀,对不起,我是想在发布之前把“PRODCODE2”改回“PRODCODE”。它不是无效的,因为如果没有行product_description=g.First().prd_prddes`,代码就会工作,并返回所有正确的值。谢谢
product_description = g.FirstOrDefault() == null 
    ? g.FirstOrDefault().prd_prddes  
    : "Empty";