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

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

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

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

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

880閲覧

画面の内容をLINQに反映して

niconicodryyy

総合スコア36

C#

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

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/03/30 02:18

編集2020/03/30 04:49

やりたいこと:
画面に入力された数値をLINQに反映したいです。

javascriptとHTMLでWEBサービスを作成し
C#でAPIを作成しております。
端的に言うと画面でカラム名や数値を入力するとその内容のデータを
データベースから取得してくるサービスを学習の為作成しております。

日付をもとにデータを取得する場合3/1~3/10までと言った日付~日付のデータ取得はできるのですが
3/1から昇順で5件のデータを取得と言ったデータ取得の範囲を件数で指定する場合のやり方がわからなく困っています。

C#

1var retData = list.Select(ex => new { ex.Date}).Take(1).ToList().OrderBy(ex => ex.Date);

上記のコードでtakeに数値を入れればその件数分データを取得できる事は理解しています。
どうすれば画面の内容をLINQに反映して欲しい件数分取得することが出来るのでしょうか。

カラム名の反映はAPIが受け取ったURLで取得するカラム名を判断するようにしています。
選択したカラム名をURLに追加していってAPIに渡しています。
取得するテーブル名は固定でカラムのみを変化させます。
一度全てのデータを取得するのではなく、負担を軽くする為指定した件数分しか取得できないようにしたいです。

詳しい方お力をお貸しください。

ー追記ー
HTML(Javascript)で入力したデータをURLに追加していき、APIに渡します。
APIはURLを元にデータベースに接続し指定のデータを習得しHTML(Javascript)に渡し、画面に表示させます。

Javascript

1var url = this.getURL + "?"; 2 3 // ラインを追加 4 let dateselect = <HTMLSelectElement>document.getElementById("date_select"); 5 url += "Date=" + dateselect.value;

上記のコードをjavascriptで作成しておりdate_selectの部分に画面で選択したカラム名が入ります。
その為カラム名が完全一致していないとデータを習得することができなく、3/1から5件としたい場合
3/1のデータを5件取ろうとします。その為3/1に5件のデータがなければ存在するだけのデータを取ります。

そのようにではなく、3/1に3件、3/2に1件、3/3に4件のデータがあるなら全部から昇順で5件データを取りたいのです。
テーブル名が固定の為上記のLINQ式でカラム名が変更できデータも取得できますが
カラム名が一致しているデータしか取得できないので件数の指定をどのように行うか教えて頂きたいです

環境:
windows 10
visual studio2016
SQL Server

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

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

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

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

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

gentaro

2020/03/30 02:49

APIとDBと質問文のLINQ式の関係がよくわかんない…。 API側でどのカラムでどういう条件でデータを取得するのかまで判別できているのであれば、それに合ったSQL文を発行してDBから取得したデータをそのまま返すのが素直な作りだと思いますが、どういう構造で作っていたらそのLINQの式が出てくるんでしょう?
gentaro

2020/03/30 05:30

うーん…とりあえずUIでの表示上の情報とDBの項目名(この場合はクエリパラメータも)が同期している必要がある、というのは設計上のアンチパターン(UIに変更があるとDBまで変更したり、逆にDBに変更があるとUIまで変更する必要が出てくる)なんで、そういう作り方は普通やらないし、やめた方が良いと思いますが…。 とりあえずAPIが受け取った情報でカラム名まで特定できていて、何らかの方法でテーブルの情報が全部listというオブジェクトに格納されているという前提なんでしょうか? だとすると、API←→DBの間のやりとりで毎回絞り込みもかけずにそのテーブルの情報全てにアクセスする事になるきがするので、そこも微妙な気がします。 自分ならやっぱり発行するSQLのレベルで絞り込みかける作りにするかな。 あと「LINQに反映」ってのがまだイマイチ理解できてないんですが、 > var retData = list.Select(ex => new { ex.Date}).Take(1).ToList().OrderBy(ex => ex.Date); > 上記のコードでtakeに数値を入れればその件数分データを取得できる事は理解しています。 ということは、このTake(1)の部分を画面で指定された件数にしたいって意味ですか? それなら単にこれもパラメータで受け取った件数の値を突っ込めば済むだけの気がするので、イマイチ質問の趣旨がよくわかんない。 > テーブル名が固定の為上記のLINQ式でカラム名が変更できデータも取得できますが > カラム名が一致しているデータしか取得できないので件数の指定をどのように行うか教えて頂きたいです 「カラム名が変更できデータも取得できます」「カラム名が一致しているデータしか取得できない」 が並列で書かれているけど、これが問題なんですか?件数の方?
niconicodryyy

2020/03/30 05:59

わかりにくくてすいません。 考え直してみると、カラム名が一致しているデータしか取得できない これが問題です。 一致しているデータしか習得できない為、仮に昇順で3/1から5件のデータが欲しい場合 3/1に一致するカラムしか取得できません。3/1に5件データが無ければ3/2に3/3にと5件取得出来るまで データを探しに行くようにしたいのです。
gentaro

2020/03/30 09:14

??? カラム名が「3/1」とか「3/2」ってこと??? すみませんが、ここまでやりとりをしてもどうにも理解できないんで、回答はこの内容が理解できる人にお任せします。
niconicodryyy

2020/03/31 08:05

すいません。たびたび間違えておりました。指定できるはカラム名ではなくてフィールド名になります。 「3/1」とか「3/2」はフィールド名になります。
Zuishin

2020/03/31 10:06

専門用語が多すぎてさっぱりわかりません。「カラム」「フィールド」「反映」「カラム名の変更」などの専門用語の使用をやめ、初心者にでもわかるようにふつうの日本語で説明したら通じやすくなるんじゃないでしょうか。
BluOxy

2020/03/31 10:32 編集

質問は下記のように認識していますが、合っているでしょうか。 ・LINQにパラメータを渡したい(LINQに反映したい) ・3/1に3件、3/2に1件、3/3に4件のデータがあるなら全部から昇順で5件データを取りたい > 3/1から5件としたい場合 3/1のデータを5件取ろうとします。 3/1という情報はどこか(データベース?)から取得できる認識ですが、合っていますか。 もし取得できていないなら、niconicodryyy さん側で解決するか、質問文を修正してそちらを質問の主題にするか、そのどちらかをまずは対応してください(LINQにパラメータを渡す方法を聞く前に)。 できているなら、その旨を質問内容に書いてください。すると、そもそもデータベース・カラム云々の話はこの質問と関係がなくなるのではないでしょうか。
guest

回答2

0

ベストアンサー

HTML(Javascript)で入力したデータ

に「表示したいデータの件数」と「開始日付」が含まれていることを前提に

3/1に3件、3/2に1件、3/3に4件のデータがあるなら全部から昇順で5件データを取りたいのです。

を実装するなら、単純に下記で良いのではないでしょうか。

C#

1public IEnumerable<DateTime> Get(IEnumerable<DateTime> list, int count, DateTime from){ 2 return list 3 .Where(x => x.Date >= from.Date) 4 .OrderBy(x => x.Date) 5 .Take(count); 6}

sample

投稿2020/03/31 09:48

編集2020/03/31 10:15
BluOxy

総合スコア2663

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

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

0

必要なデータ件数もjsからパラメータで送ってあげればよいのでは?

投稿2020/03/30 05:09

tsubaki961

総合スコア73

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

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

niconicodryyy

2020/03/30 05:32

件数をファイルで送ると3/1から5件と指定した場合3/1のデータから5件探そうとします。 3/1にデータが無い場合3/2.3日へと指定した件数分データを取得できるまでずらしたいのです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問