0

我有以下 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”无效。

说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.Data.SqlClient.SqlException:列名“PRODCODE”无效。列名“PRODCODE”无效。列名“PRODCODE”无效。

product_description列名 PRODCODE 显然不是无效的,因为如果我删除该行,它就可以正常工作。

这是非常奇特的...

4

2 回答 2

2

看起来您所拥有的任何内容都g没有名为'PRODCODE'

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

于 2012-11-15T15:41:46.490 回答
0

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

试试这个:

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

如果第一项为空,它将回退并显示“空”。不过,我不确定第一项是否为空,所以它可能不起作用......

于 2012-11-15T16:10:46.133 回答