質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

2031閲覧

【C#】Linqの初歩の質問

miyamoto0105

総合スコア216

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

1クリップ

投稿2015/10/07 07:38

Linq下記の通らないコードを動かすには、どう書けばいいのでしょうか。

★このコードが通らない
dtData = dtData.AsEnumerable().Where(r => r.Field["col1"] == "").Select(r => r["col1"] = "0").ToList();

★これはOK
for (int i = 0; i < dtData.Rows.Count; i++)
{
if(dtData.Rows[i]["col1"].ToString() == "")
{
dtData.Rows[i]["col1"] = 0;
}
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tak1wa

2015/10/07 07:39

dtDataの型はなんでしょう。DataTable?
miyamoto0105

2015/10/07 07:40

DataTableです。すいません。
Tak1wa

2015/10/07 07:44

もう1点。やりたいことは「★これはOK 」の内容ですか?col1が空のレコードは強制的に0にしたい?
miyamoto0105

2015/10/07 07:46

はい。 これはOKの内容をやりたいです。
Tak1wa

2015/10/07 07:59

ちょっと意図がわからないです。何のためにLINQを使うという方向性になってるんですか?
miyamoto0105

2015/10/07 08:03

勉強のためです。for文で書いたので、Linqでも書いて見たいです。
guest

回答2

0

ベストアンサー

LINQで普通に動くと思いますけど..

C#

1var dt = new System.Data.DataTable("tmp"); 2 3dt.Columns.Add("col1", typeof(string)); 4dt.Columns.Add("col2", typeof(string)); 5 6var row = dt.NewRow(); 7row["col1"] = "A01"; 8row["col2"] = "B01"; 9dt.Rows.Add(row); 10 11row = dt.NewRow(); 12row["col1"] = "A02"; 13row["col2"] = "B02"; 14dt.Rows.Add(row); 15 16row = dt.NewRow(); 17row["col1"] = "A03"; 18row["col2"] = "B03"; 19dt.Rows.Add(row); 20 21dt.AsEnumerable().Where(r => r.Field<string>("col1") == "A02").Select(r => r["col2"] = "hoge").ToList(); 22

投稿2015/10/08 00:26

dojikko

総合スコア3939

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tak1wa

2015/10/08 00:32

変な勘違いしてました。問題なく出来ましたね。
miyamoto0105

2015/10/08 02:18

<string>をつけると動きました。ありがとうございます。
guest

0

こんにちは。

通常オブジェクトのUPDATEをLINQのみでは完結させないと思います。
イテレータ取得までをLINQで行い、その後は結局 foreach などで値の更新を行うことになるのではないかと。

C#

1foreach(var current in dtData.AsEnumerable().Where(r => r["col1"].ToString() == "")) 2{ 3 current["col1"] = 0; 4}

投稿2015/10/07 14:57

Tak1wa

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miyamoto0105

2015/10/08 02:19

おかげさまで解決しました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問