0
var query = (from row in playerSpotAndValue.AsEnumerable()
             where !row.Field<string>("RunningTotal").Contains("/")
             group row by row.Field<UInt16>("SpotID") into spotID
             orderby spotID.Key
             select new
             {
                 SpotID = spotID.Key,
                 HandTotal= spotID.Max(p => Convert.ToUInt16(p.Field<string>("RunningTotal"))),
                 RowsCount = spotID.Count()
             }); 

このクエリでCopyToDataTableを使用して、このようにクエリできるようにする方法

query.CopyToDataTable().Rows[0]["HandTotal"].ToString();
4

4 に答える 4

1

はい、次の拡張メソッドを使用する必要があります。

public static DataTable CopyToDataTable<T>(this IEnumerable<T> source) where T : DataRow

IEnumerable<DataRow>ただし、最初に、匿名型を持たない必要があります。

テーブルには、入力する列が必要です。次に、DateTable.NewRow()メソッドを使用します

于 2012-04-11T11:22:47.243 に答える
1

dtDealerTotal(元は質問で参照されている)が、クエリから行を検索するテーブルであり、結果を次SpotIDのように追加すると仮定します。HandTotalDataColumn

DataTable result = dtDealerTotal.Clone();
result.Columns.Add(new DataColumn("HandTotal", typeof(UInt16)));
var dealers = dtDealerTotal.AsEnumerable();
foreach (var x in query)
{
    foreach (var d in dealers.Where(dr => dr.Field<UInt16>("SpotID") == x.SpotID))
    {
        var fields = d.ItemArray;
        fields.Concat(new Object[] { x.HandTotal });
        result.Rows.Add(fields);
    }
}

CopyToDataTable:匿名型ではなく、既存の DataRows でのみ使用できます。したがって、最初にこれらの行を選択して新しい行にコピーするDataTableか、(ここのようにスキーマが異なる場合は、追加したいので)手動でHandTotal新しい行を作成する必要があります。DataTable

于 2012-04-11T11:36:59.790 に答える
0

これは、あなたが望むものを達成できる方法です。

LINQ クエリ、および DataTable を返す関数は次のとおりです。

public static DataTable ToDataTable(DataContext ctx, object query) // ctx is your data context, & query is your linq query 
{
    IDbCommand cmd;

    try
    {
        cmd = ctx.GetCommand(query as IQueryable);
    }
    catch
    {
        throw new Exception("Could not connect database");
    }

    SqlDataAdapter adapter = new SqlDataAdapter();
    adapter.SelectCommand = (SqlCommand)cmd;
    DataTable dt = new DataTable();

    try
    {
        cmd.Connection.Open();

    }
    catch
    {
        cmd.Connection.Close();
        throw new Exception("Could not connect database");
    }

    try
    {
        adapter.Fill(dt);
        cmd.Connection.Close();
    }
    catch(Exception ex)
    {
        cmd.Connection.Close();
        throw new Exception("Query Parsing Error");
    }

    return dt;
}
于 2012-04-11T11:29:14.617 に答える