Вставка значения количества записей в таблицу базы данных с использованием LINQtoSQL - PullRequest
2 голосов
/ 04 мая 2011

У меня есть таблица базы данных с именем AllCustomersHistoryOfRecords , которая представляет собой таблицу с историей всех записей, купленных всеми пользователями, которые посещают мое приложение / веб-сайт. Есть еще одна таблица под названием Компоненты , в которой перечислены все компоненты, доступные (для загрузки) с моего сайта. Теперь я хочу подсчитать все записи, доступные в AllCustomersHistoryOfRecords и обновить счет в поле * 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();

И этот код я использую для вставки данных в Компоненты Таблица:

Component comp = new Component { Total_Downloads = componentCount};
db.Components.InsertOnSubmit(comp);

Но проблема в том, что я получаю следующую ошибку:

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

Как я могу решить эту проблему? Пожалуйста, помогите мне !!

Спасибо в ожидании

Ответы [ 3 ]

1 голос
/ 04 мая 2011

Я предполагаю, что поле componentCount является пустым полем?

Если это так, вам нужно преобразовать componentCount в нулевое целое число, а также вернуть набор результатов из запроса 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);

РЕДАКТИРОВАТЬ Циклический просмотр компонентов и счетчик обновлений

Вам необходимо заменить 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();
1 голос
/ 04 мая 2011

Вы пробовали вызывать .First () для вашего запроса, чтобы результат не возвращался как IQuerable.Об этом также говорится в этом сообщении.

Не удается неявно преобразовать тип 'System.Linq.IQueryable' в 'int?'

1 голос
/ 04 мая 2011

Разве там не должно быть набора скобок?

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();

EDIT: Если я правильно понимаю, вы пытаетесь получить сумму по всем пунктам? Если правильно, то как насчет этого:

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();

Если нет, то не могли бы вы описать, что вы хотите сделать?

...