teratail header banner
teratail header banner
質問するログイン新規登録
ASP.NET MVC Framework

ASP.NET MVC Frameworkは、MVCパターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。

Q&A

解決済

1回答

1242閲覧

mvc 検索機能 Datetime型エラー

tomokia

総合スコア28

ASP.NET MVC Framework

ASP.NET MVC Frameworkは、MVCパターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。

0グッド

0クリップ

投稿2022/05/12 07:26

編集2022/05/12 08:35

0

0

vs2022 mvc NET6.0環境で検索機能を追加しています。
そこで検索対象を日付にしたく、modelからPublic Datetimeのものを引っ張ってこようとしたがエラーが出てしまいました。

エラー CS1929 「'DateTime' に 'Contains' の定義が含まれておらず、最も適している拡張メソッド オーバーロード 'MemoryExtensions.Contains<string>(ReadOnlySpan<string>, string)' には 'ReadOnlySpan<string>' 型のレシーバーが必要です」
公式で何故エラーになるのかは分かったのですが、解決方法がいまいちよくわからず困っています。よろしければご教示ください。

Controller public async Task<IActionResult> Index(string searchNotice) { var mnotice = from m in _context.MNotices select m; if (!String.IsNullOrEmpty(searchNotice)) { mnotice = mnotice.Where(s => s.StartDate.Contains(searchNotice));←StartDateがエラー } return View(await mnotice.ToListAsync()); }
model public DateTime StartDate { get; set; }

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2022/05/12 08:08

Visual Studio 2022 を使っているなら Visual Studio Code のタグは不適切なので外してください。 .NET Framework / Core どっちかと、そのバージョンを書こう。 前のスレッドのように「質問への追記・修正の依頼」を無視するなら今後はこちらもあなたを無視します。
tomokia

2022/05/12 08:36

大変失礼いたしました。 不適切な部分を修正致しました
退会済みユーザー

退会済みユーザー

2022/05/13 01:36

searchNotice に例えば "2022/05/13" というような単一の日付の文字列が渡され、データベースの MNotices テーブルから StartDate 列がその日付と一致するレコードを抽出したいのですか? Contains を使っているところが気になるのですが、ひょっとして searchNotice には複数の日付が渡され、SQL 文で言うと WHERE StartDate IN (日付1, 日付2,...) というような条件で抽出したいのですか?
tomokia

2022/05/13 06:10 編集

はい、一致検索したいと考えています。 完全一致でなくとも、2022年だけでの部分一致も可能にしたいです
退会済みユーザー

退会済みユーザー

2022/05/13 06:56

上の質問者さんのコメントと私の回答が前後してしまいました。 要するに、searchNotice に例えば "2022/05/13" とか "2022" というような単一の日付の文字列が渡され、データベースの MNotices テーブルから StartDate 列がその文字列を含んでいるレコードを抽出したいということでいいのですか?
guest

回答1

0

ベストアンサー

(1) searchNotice に例えば "2022/05/13" というような単一の日付の文字列が渡され、データベースの MNotices テーブルから StartDate 列がその日付と一致するレコードを抽出する場合。

// Linq to Entities では下のような Where 句のコードは使えないので // ToLisyAsync で List<T> 型の .NET オブジェクトを生成して、Linq // to Objects を使って抽出できるようにする var mnotice = await _context.MNotices.ToListAsync(); // 単一の日付。書式を下の DateTime.ToString("yyyy/MM/dd") と合わせること string searchNotice = "2022/05/13"; // Where 句を使って指定した日付のレコードを抽出 var result = mnotice.Where(m => m.StartDate.ToString("yyyy/MM/dd") == searchNotice);

(2) searchNotice には例えば "2022/05/11,2022/05/12,2022/05/13" というような複数の日付が渡され、SQL 文で言うと WHERE StartDate IN (日付1, 日付2,...) というような条件で抽出したい場合。

// Linq to Entities では下のような Where 句のコードは使えないので // ToLisyAsync で List<T> 型の .NET オブジェクトを生成して、Linq // to Objects を使って抽出できるようにする var mnotice = await _context.MNotices.ToListAsync(); // 複数の日付。例えば、引数として以下のような文字列を受け取るとすると、 string searchNotice = "2022/05/11,2022/05/12,2022/05/13"; // それを加工して以下のように配列にする。各日付の書式を下の // DateTime.ToString("yyyy/MM/dd") と合わせること string[] dates = searchNotice.Split(','); // Where 句 + Contains メソッドを使って指定した複数の日付のレコードを抽出 var result = mnotice.Where(m => dates.Contains(m.StartDate.ToString("yyyy/MM/dd")));

不明点があったら下のコメント欄で質問してください。


【追記】

(3) searchNotice に例えば "2022/05/13" とか "2022/5" とか "2022" というような日付の文字列が渡され、データベースの MNotices テーブルから StartDate 列がその文字列を含んでいるレコードを抽出したい場合。

public async Task<IActionResult> Index(string searchNotice) { // searchNotice の書式と下の ToString("yyyy/MM/dd") とを合わせること。 // 例えば、searchNotice が "2022-5-13" とかであれば ToString("yyyy-M-dd") とする var mnotice = await _context.MNotices.ToListAsync(); if (!String.IsNullOrEmpty(searchNotice)) { mnotice = mnotice.Where(s => s.StartDate.ToString("yyyy/MM/dd").Contains(searchNotice)); } return View(mnotice); }

投稿2022/05/13 06:38

編集2022/05/13 07:45
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

tomokia

2022/05/13 07:17

単一の日付で入力した日付が含まれているレコードを抽出したいです。 where句は元のところを置き換えればいいと思いますが、var mnotice = await _context.MNotices.ToListAsync();はどこに入力すべきですか? またstring searchNotice = "2022/05/13";は入力するのですか?
退会済みユーザー

退会済みユーザー

2022/05/13 07:34

質問者さん、質問のコメント欄は見てないのですか? 「要するに、searchNotice に例えば "2022/05/13" とか "2022" というような単一の日付の文字列が渡され、データベースの MNotices テーブルから StartDate 列がその文字列を含んでいるレコードを抽出したいということでいいのですか?」・・・と聞きましたけど? それで良いと理解して上の回答欄に追記しておきます。
tomokia

2022/05/13 08:05

いろいろ試したらできました!参考にさせていただきました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問