我有以下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);
正如您所看到的,我已经注释掉了创建BestSeller
个对象的行。
我希望在product_description
对象中设置BestSeller
。所以我在下面添加了一行:
product_description = g.First().prd_prddes
“prd_prddes”是保存我们产品说明的列的名称。
然而,只要我将此行添加到我的查询中,我就会收到一个奇怪的错误:
无效的列名称'PRODCODE'。
无效的列名称'PRODCODE'。
无效的列名称'PRODCODE'。
描述:执行期间发生了未处理的异常 当前的网络请求。请查看堆栈跟踪了解更多信息 有关错误的信息以及它在代码中的起源。
异常详细信息:System.Data.SqlClient.SqlException:无效列 名称'PRODCODE'。列名称“PRODCODE”无效。列名无效 'PRODCODE'。
列名PRODCODE显然不是无效的,因为如果删除product_description
行,它就可以正常工作。
这非常特别......
答案 0 :(得分:2)
看起来g
中的任何内容都没有名为'PRODCODE'
的列
就我个人而言,我只会在你的select语句中选择g
,然后我会制定一个断点并使用调试器查看其中的内容。
答案 1 :(得分:0)
您是否检查过所有PRODCODE
结果是否有效?听起来好像是一个空或空。这意味着你仍然可以按它分组,但是一旦你尝试选择它就会抛出那个错误。
试试这个:
product_description = g.FirstOrDefault() == null
? g.FirstOrDefault().prd_prddes
: "Empty";
如果第一个项目为null,它将回退并显示“Empty”。我不确定第一项是否为空,所以它可能不起作用......