C# LINQ错误检索附加列值时列无效
我有以下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
// 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";