0

C# MVC では、データ テーブルで次の「結果」(var) を取得する必要があります。

var allCompanies = objentity.ExecuteFunction<SearchAvailEmployees_Result>("SearchAvailEmployees", lstParam.ToArray())
                            .ToList();

var result = from c in allCompanies select new[] { 
                            c.LastName, 
                            c.FirstName, 
                            c.Phone, 
                            c.City, 
                            c.PositionApplied, 
                            c.Status, 
                            Convert.ToString(c.CallDate.Value.ToShortDateString()), 
                            Convert.ToString(c.CellOrPager), 
                            c.Gender 
                        };

次のコードを試しましたが、うまくいきません。次のエラーが表示されます

「型 'System.Collections.Generic.IEnumerable' を 'System.Collections.Generic.IEnumerable' に暗黙的に変換できません。明示的な変換が存在します (キャストがありませんか?)」

IEnumerable<DataRow> query = from c in allCompanies select new[] { 
                                            c.LastName, 
                                            c.FirstName, 
                                            c.Phone, 
                                            c.City, 
                                            c.PositionApplied, 
                                            c.Status, 
                                            Convert.ToString(c.CallDate.Value.ToShortDateString()), 
                                            Convert.ToString(c.CellOrPager), 
                                            c.Gender 
                                        };

DataTable boundTable = query.CopyToDataTable<DataRow>();

linqクエリの結果をデータテーブルに保存する代替ソリューションはありますか?

4

3 に答える 3

4

これは私がそれを行う方法です:

最初に、次のように新しい列を宣言してDataTable列を追加します。

DataTable dt = new DataTable();
dt.Columns.Add("FirstName");
dt.Columns.Add("LastName");
DataRow row = null;

次に、目的のクエリを実行します。

var query = from c in allCompanies select { c.LastName, c.FirstName};

ここで、クエリを繰り返し処理して、次のように入力しますDataTable

foreach (var rowObj in query)
{
    row = dt.NewRow();
    dt.Rows.Add(rowObj.FirstName, rowObj.LastName);
}
return dt;

まだ私のクエリでは、「結合」ステートメントを使用しています。

于 2012-09-12T10:53:06.113 に答える
2

まず、DataTable正しいスキーマで作成します。

var dataTable = new DataTable();
            dataTable.Columns.Add("LastName", typeof (string));
            dataTable.Columns.Add("FirstName", typeof(string));
            // Add more columns

次に、値オブジェクトの配列を選択します。

var result = allCompanies.Select(c => new object[] {
                    c.LastName, 
                    c.FirstName, 
                    c.Phone, 
                    c.City, 
                    c.PositionApplied, 
                    c.Status, 
                    Convert.ToString(c.CallDate.Value.ToShortDateString()), 
                    Convert.ToString(c.CellOrPager), 
                    c.Gender 
                }).ToList();

3 番目に、ループして新しい行を作成し、新しい行DataTableに値を割り当てます。

result.Foreach(array => {
     var row = dataTable.NewRow();
     row.ItemArray = array;
     dataTable.Rows.Add(row);
    });
于 2012-09-12T10:57:23.987 に答える
1

new の後に [] を削除する必要があります。

var result = from c in allCompanies 
             select new { c.LastName, c.FirstName, c.Phone, c.City, 
             c.PositionApplied, c.Status, 
             CallDate = Convert.ToString(c.CallDate.Value.ToShortDateString()), 
             CellOrPager = Convert.ToString(c.CellOrPager), c.Gender };

ここにデータテーブルを作成します

var dataTable = new DataTable();
dataTable.Columns.AddRange( new DataColumn[]{ 
    new DataColumn("LastName" , typeof(string)),
    new DataColumn("FirstName" , typeof(string)),
    new DataColumn("Phone" , typeof(string)),
    new DataColumn("City" , typeof(string)),
    new DataColumn("PositionApplied" , typeof(string)),
    new DataColumn("Status" , typeof(string)),
    new DataColumn("CallDate" , typeof(string)),
    new DataColumn("CellOrPager" , typeof(string)),
    new DataColumn("Gender" , typeof(string))
});

この結果を使用して DataTable を埋める

result.ToList().ForEach(x=>{
   var row = dataTable.NewRow();

   row.["LastName"] = x.LastName;
   row.["FirstName"] = x.FirstName;
   row.["Phone"] = x.Phone;
   row.["City"] = x.City;
   row.["PositionApplied"] = x.PositionApplied;
   row.["Status"] = x.Status;
   row.["CallDate"] = x.CallDate;
   row.["CellOrPager"] = x.CellOrPager;
   row.["Gender"] = x.Gender;

   dataTable.Rows.Add(row);
});
于 2012-09-12T10:41:49.540 に答える