2

AllCustomersHistoryOfRecordsというデータベーステーブルがあります。これは、アプリケーション/Webサイトにアクセスするすべてのユーザーが購入したすべてのレコードの履歴を含むテーブルです。私のウェブサイトから(ダウンロード用に)利用可能なすべてのコンポーネントをリストするだけの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();

そして、これは私がデータをコンポーネントテーブルに挿入するために使用しているコードです:

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

しかし、問題は次のエラーが発生することです。

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

どうすればこの問題を解決できますか?私を助けてください!!

期待してくれてありがとう

4

3 に答える 3

1

そこに括弧のセットがあるべきではありませんか?

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

そうでない場合は、何をしたいのか説明していただけますか?

于 2011-05-04T12:47:52.333 に答える
1

componentCountフィールドはnull許容フィールドだと思いますか?

この場合、componentCountをnull許容のintにキャストし、IQueryableではなくlinqクエリから結果セットを返す必要があります。

    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();
于 2011-05-04T12:49:28.587 に答える
1

結果がIQuerableとして返されないように、クエリで.First()を呼び出してみましたか。これは、この投稿にも記載されています。

タイプ「System.Linq.IQueryable」を「int?」に暗黙的に変換することはできません。

于 2011-05-04T13:23:38.627 に答える