使用LINQtoSQL将记录的计数值插入数据库表

本文关键字:插入 数据库 LINQtoSQL 记录 使用 | 更新日期: 2023-09-27 17:54:32

我有一个名为AllCustomersHistoryOfRecords的数据库表这是访问我的应用程序/网站的所有用户购买的所有记录的历史表。还有一个名为Components的表,它只是列出了我网站上所有可用的组件(用于下载)。现在我想计算AllCustomersHistoryOfRecords中可用的所有记录,并更新Components表的字段*Total_Downloads*中的计数。下面是我要做的:

主要计算AllCustomersHistoryOfRecords表中每条记录的出现次数。

var componentCount = from c in db.Components
                                 join cr in db.AllCustomersHistoryOfRecords
                                 on c.Component_Name equals cr.Software_Title into temporary
                                 select temporary.Count();
这是我用来插入数据到Components表的代码:
Component comp = new Component { Total_Downloads = componentCount};
db.Components.InsertOnSubmit(comp);

但问题是我得到以下错误:

Cannot implicitly convert type 'System.Linq.IQueryable<int>' to 'int?'

我该如何解决这个问题?请帮帮我!!

感谢期待

使用LINQtoSQL将记录的计数值插入数据库表

我猜componentCount字段是一个可空字段?

如果是这种情况,你需要将componentCount转换为一个可空的int,并且还返回一个来自linq查询的结果集,而不是一个IQueryable。

    var componentCount = (from c in db.Components
                                     join cr in db.AllCustomersHistoryOfRecords
                                     on c.Component_Name equals cr.Software_Title into temporary
                                     select c).Count();
    Component comp = new Component { Total_Downloads = (int?)componentCount};
    db.Components.InsertOnSubmit(comp);

EDIT遍历组件和更新计数

你需要用组件表/对象上的主键替换c.ComponenetId和comp.ComponentId。可能会有一些小问题,因为我没有运行这个,但它应该给你一个好主意,如何实现你所追求的。

var components = (from c in db.components select c).ToList();
foreach(var comp in components)
{
    var componentCount = (from c in db.Components
                         join cr in db.AllCustomersHistoryOfRecords
                         on c.Component_Name equals cr.Software_Title into temporary
                         where c.ComponentId == comp.ComponentId
                         select c).Count();
    comp.Total_Downloads = (int?)componentCount;                
}
db.SubmitChanges();

您是否尝试在您的查询上调用. first(),因此结果不会作为IQuerable返回。这篇文章中也有说明。

不能隐式转换类型"System.Linq"。可查询的' to 'int?'

那里不应该有一组括号吗?

var componentCount = (from c in db.Components
                             join cr in db.AllCustomersHistoryOfRecords
                             on c.Component_Name equals cr.Software_Title into temporary
                             select temporary).Count();

编辑:如果我理解正确的话,你是想把所有的数都加起来?如果是正确的,那么这样写:

var componentCount = (from c in db.Components
                             join cr in db.AllCustomersHistoryOfRecords
                             on c.Component_Name equals cr.Software_Title into temporary
                             select temporary.Count()).Sum();

如果没有,请描述一下你想做什么?