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

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

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

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

Q&A

解決済

1回答

1372閲覧

C# 条件一致するデータの取得方法

NewNiche

総合スコア22

C#

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

0グッド

0クリップ

投稿2022/01/07 04:11

編集2022/01/12 05:27

前提・実現したいこと

以下のようなテーブを考えた際に,
テーブルBの列;コードを’ー’と’N’で分割したものとテーブルAの列;年月日を比較して、
テーブルAからシリアル(ここではaaaa)を取得するため、
合致するテーブルAのデータをすべてリストに格納したいです。

該当のソースコード○○○○の箇所が考えつかないため、ご教授いただきたいです。

テーブルA

シリアル
11124aaaa
22175baaa

テーブルB

コード
11-12N4
10-3N4

該当のソースコード

C#

1 2 //リストにテーブルBのコードを入れる 3 var List = new List<string>(); 4 テーブルBエンティティ.ForEach(x => { List.Add(x.Code); }); 5 6 //Listのcodeを三分割して、テーブルAの年月日と比較する処理 7 ○○○○ 8 9 //年月日が一致するものを代入 10 var Newエンティティ = context.テーブルA.Where(x => List.Contains(x.Year.ToString())&& 11   x => List.Contains(x.Month.ToString())&&  12  x => List.Contains(x.Day.ToString())); 13 14 //テーブルBと合致するテーブルAのリスト 15 var GetSerialList = Newエンティティ.ToList(); 16

補足情報(FW/ツールのバージョンなど)

C#
.NET
Entity Framework
SQLServer
VisualStudio2017

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

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

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

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

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

1T2R3M4

2022/01/07 04:21

>ざっくりとした考え方 テーブルBの列1のデータを’ー’と’N’で分割したものとテーブルAの列123を比較して、テーブルAから列4のデータを取得 ではないのですか。
Zuishin

2022/01/07 04:24

分割の仕方がわからないということなら、Regex.Split が手っ取り早いと思います。
m.ts10806

2022/01/07 04:28 編集

現状で1行も書けない状態だと考え方聞いてもコードには起こせないのでは
Zuishin

2022/01/07 04:45

まあ「テーブル」としか書いてないですしね。本当に C# かどうかも怪しいです。
退会済みユーザー

退会済みユーザー

2022/01/07 05:40

「テーブルA」と「テーブルB」を C# のコードでどのにように表現できますか? それができないようですと、話は通じないと思いますので、質問欄を編集してコードを追記してください。
退会済みユーザー

退会済みユーザー

2022/01/09 22:49 編集

追記したコードの中のコメント、 > Listのcodeを三分割して、テーブルAの年月日と比較する処理 が分かれば後は自力で解決できるのですね? (それだけでは無理そうな感じがしますので聞いてます)
NewNiche

2022/01/10 01:35

SurferOnWwwさん その処理がわかれば、解決するつもりです。。
guest

回答1

0

ベストアンサー

以下の所だけわかれば解決できるそうですので・・・ (それなら、1T2R3M4 さんがコメントされたことで解決できたはずですが)

該当のソースコード○○○○の箇所が考えつかないため、ご教授いただきたいです。

//Listのcodeを三分割して、テーブルAの年月日と比較する処理
○○○○

質問のコードの「//リストにテーブルBのコードを入れる」の結果 List[0] が "11-12N4"、List[1] が "10-3N4" になると理解していますが、その理解で合っていれば、例えば List[0] を対象とするなら以下のようにして string 型の配列 "11", "12", "4" に「三分割」できます。

string[] ymd = List[0].Split(new char[] { '-', 'N' });

「テーブルA」の構造が不明ですが、質問のコードを見ると対応するエンティティクラスは Year, Month, Day という string 型のプロパティを持っているようですので、以下のようにすれば「テーブルAの年月日と比較する処理」はできると思います。

var records = context.テーブルA .Where(x => x.Year == ymd[0] && x.Month == ymd[1] && x.Day == ymd[2]) .ToList();

投稿2022/01/10 02:09

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

NewNiche

2022/01/11 01:46

回答ありがとうございます、少し前進できそうです。 質問なのですが、テーブルBとIDで連結できるテーブルCの更新Noも、テーブルAとの比較条件に追加する場合、現状のコードに追記する形で対応できるでしょうか。
退会済みユーザー

退会済みユーザー

2022/01/11 02:09

最初の質問の本題とは違う追加質問は、新たに別のスレッドを立てて質問してください。そもそも「テーブルC」とか言われても質問にその情報はなく意味不明です。
NewNiche

2022/01/11 02:27

失礼いたしました。 回答していただいたコードについての質問です。 一つ目のコードでList[0]と指定すると、テーブルBの1行目2行目3行目・・と処理していく場合、二つ目のコードのymdの添え字[]はどのように表現するのでしょうか。
退会済みユーザー

退会済みユーザー

2022/01/11 04:04

同じです。ごくごく基本的な話です。勉強してください。
NewNiche

2022/01/12 06:57

申し訳ございません。。 foreachで回すということでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問