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

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

新規登録して質問してみよう
ただいま回答率
85.31%
VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

3回答

11833閲覧

LINQで複数をselectしたい

chintao1224

総合スコア156

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2019/07/20 18:37

vb2017 Community版を使っています。
LINQを使ってselectしています。
複数selectする方法を知りたいです。

vb.net

1Dim sArr() As String = sSelData().ToArray().Where(Function(x) x.Name <> String.Empty).OrderBy(Function(x) x.Name).Select(Function(x) x.Name).Distinct().ToArray() 2 3sSelDataの戻り値 4 '型 5 Public Class Data 6 Public Property Code As String 7 Public Property Name As String 8 Public Property Count As Integer 9 End Class 10 11 dim list As List(Of Data)

Select(Function(x) x.Name)を複数selectするようにしたいです。

よろしくお願いします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/07/20 20:40

現状はどういう結果になるのですか? どこが問題なのですか?
YAmaGNZ

2019/07/21 01:03

このような質問は、 「現状このようなデータで実行してこういう結果が返ってくるのですが、欲しい結果はこういうものです。」 と入力データ、現状の出力データ、希望の出力データを示すようにしてください。
chintao1224

2019/07/21 01:31

ほしいデータ、入力データ、出力データです。 欲しいデータ nameとcountのデータで、配列でもクラスでもどちらでもよい(できればクラス型の配列がよい) 入力データ data型のクラスのリスト(上記) 現状の出力データ nameの配列 よろしくお願いします。
YAmaGNZ

2019/07/21 01:44

言葉ではなく、私が回答で書いたように具体的なデータを示すようにしてください。
guest

回答3

0

もしかして、リストから同じ名前のものを纏めて、Countが合計されたものが欲しいのですか?

VB.NET

1Dim sSelData As New List(Of Data) 2 3sSelData.Add(New Data With {.Code = 1, .Name = "AAA", .Count = 10}) 4sSelData.Add(New Data With {.Code = 1, .Name = "AAA", .Count = 25}) 5sSelData.Add(New Data With {.Code = 2, .Name = "BBB", .Count = 100}) 6sSelData.Add(New Data With {.Code = 3, .Name = "CCC", .Count = 123}) 7sSelData.Add(New Data With {.Code = 2, .Name = "BBB", .Count = 30}) 8sSelData.Add(New Data With {.Code = 4, .Name = "DDD", .Count = 150}) 9

というデータがあった時に
Code = 1 : Name = "AAA" : Count = 35
Code = 2 : Name = "BBB" : Count = 130
Code = 3 : Name = "CCC" : Count = 123
Code = 4 : Name = "DDD" : Count = 150
というデータが欲しいということなのであれば
GroupByしてSumで合算すればよろしいかと思います。

投稿2019/07/21 01:40

YAmaGNZ

総合スコア10542

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

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

0

ベストアンサー

Linqではいつもクエリ構文を使っているので、メソッド構文については勉強不足ですが、
クエリ構文であれば、複数メンバのSelectは以下のように記述します。

VB

1Dim qry = From x In sSelData() _ 2 Where x.Name <> String.Empty _ 3 Order By x.Name _ 4 Select x.Name, x.Count 5 6For Each q In qry 7 'Name, Countのメンバ名はそのまま使えます 8 Console.WriteLine("{0}, {1}", q.Name, q.Count.ToString) 9Next

投稿2019/07/22 06:52

編集2019/07/23 01:29
kenshirou

総合スコア772

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

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

0

データの内容がわからんので何ともですが、Distinctしてるから重複排除されてるだけ、というオチでは。
Distinctを取り除けば良いんじゃないですか。

投稿2019/07/21 01:01

gentaro

総合スコア8947

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

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

YAmaGNZ

2019/07/21 01:21

Distinctがあっても、重複しているデータしかない場合以外は複数取得できるはずです。 入力データがわからんので、あれですが
chintao1224

2019/07/21 01:36

もともと重複が無いデータなのでdistinct外しても良いのですが、念のためdistinctしています。selectでnameとcountを指定したいのですが、どうすれば良いのか分かりません。
gentaro

2019/07/21 01:42

Selectを取っ払うか、Select内で匿名オブジェクトをnewしてそのまま返せばいいんでは。
YAmaGNZ

2019/07/21 01:43

回答しましたが、gentaroさんの言うことが正しい気がします。
chintao1224

2019/07/21 02:01

Select(Function(x) New{x.Name, x.Count})のように書いてみたのですが、エラーが出ました。「オーバーロードの解決に失敗しました」と出ます。
gentaro

2019/07/21 02:35

「エラーが出ました」と言われても、そりゃ書き方がまずいだけでしょう。 Selectで匿名オブジェクトを返す方法ぐらいは自分で調べて下さい。(Withが抜けてるだけだと思うけど) つか「Select取っ払う」方が希望してる結果に近いと思うんだけど、試してないんですかね。
chintao1224

2019/07/21 15:16

いろいろ調べて次のように変更してみましたが、型変換エラーになります。 Dim lst As List(Of Data) = sSelData().Where(Function(x) x.Name <> String.Empty).OrderBy(Function(x) x.Name).Select(Function(x) New Data With {.Name = x.Name, .Count = x.Count}).Distinct ちなみにsSelDataの戻り値はList(Of Data)です。 どうにか型変換エラーを解消したいです。 よろしくお願いします。
gentaro

2019/07/21 15:56

回答してる内容をちゃんと読んでないか無視されてるようなので、これ以上は知りません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問