0

私は次のコードを持っています:-

        var distinctValues = DtSet.Tables["tblData"].AsEnumerable()
                    .Select(row => new
                    {
                        name_1 = "1",
                        name_2 = "I",
                        name_3 = row.Field<string>("EorD"),
                        name_4 = row.Field<string>("InvNo")
                    })
                    .Distinct();

「InvNo」と「Amount」の 2 つの列を持つ別のデータテーブル (DtSet.Tables["tblCost"]) がある場合、最初のコードに 5 番目の列を追加して、それぞれの金額の合計を戻すにはどうすればよいですか? tblCost の InvNo? お気に入り :-

        var distinctValues = DtSet.Tables["tblData"].AsEnumerable()
                    .Select(row => new
                    {
                        name_1 = "1",
                        name_2 = "I",
                        name_3 = row.Field<string>("EorD"),
                        name_4 = row.Field<string>("InvNo")
                        name_5 = **Summed total of Amount column on tblCost per InvNo**
                    })
                    .Distinct();
4

3 に答える 3

1

2 つのテーブルを結合して金額を合計する SQL でクエリを実行します。

SELECT
    D.EorD,
    D.InvNo,
    SUM(C.Amount) As TotalAmount
FROM
    tblData D
    LEFT JOIN tblCost C
        ON D.InvNo = C.InvNo
GROUP BY
    D.EorD, D.InvNo;

tblCost に対応するレコードがない場合に備えて、左結合を使用しました。

注: 列についてはよくわかりませんEorDInvNoでユニークだと思いtblDataます。それ以外の場合は、対応する列がある場合は結合に含めるか、tblCostから削除して、のGROUP BYように集計関数を適用する必要がありますMAX(D.EorD) AS EorD

于 2013-01-17T19:49:26.547 に答える
1

「グループ結合」を実行して、1 つのクエリで実行できます。

var distinctValues = 
    (from data in DtSet.Tables["tblData"].AsEnumerable()
     join cost in DtSet.Tables["tblCost"].AsEnumerable().Where(r=>!r.IsNull("Amount"))
        on data.Field<string>("InvNo") equals cost.Field<string>("InvNo") 
            into dc
    select new
    {
        name_1 = "1",
        name_2 = "I",
        name_3 = data.Field<string>("EorD"),
        name_4 = data.Field<string>("InvNo"),
        name_5 = dc.Sum(d=>d.Field<int>("Amount"))
    })
    .Distinct();
于 2013-01-17T20:37:21.097 に答える
0

コレクションを結合し、グループ化し、集約する必要があります。

        var tblDataValues = DtSet.Tables["tblData"].AsEnumerable()
                                .Select(row => new
                                {
                                    name_1 = "1",
                                    name_2 = "I",
                                    name_3 = row.Field<string>("EorD"),
                                    name_4 = row.Field<string>("InvNo")
                                })
                                .Distinct();;
        var tblCostValues = DtSet.Tables["tblCost"].AsEnumerable()
                                .Select(row => new
                                {
                                    InvNo = row.Field<string>("InvNo"),
                                    Amount = row.Field<int>("Amount"),
                                }
            );


        var joinedValue = tblDataValues.Join(tblCostValues, v => v.name_4, c => c.InvNo, (v, c) => new { c, v })
                .GroupBy(k => k.v, c => c.c)
                .Select(g => new
                {
                    g.Key.name_1,
                    g.Key.name_2,
                    g.Key.name_3,
                    g.Key.name_4,
                    name_5 = g.Aggregate(0, (s, c) => s + c.Amount)
                });
于 2013-01-17T20:05:15.750 に答える