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

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

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

LINQ to Entitiesは、言語統合クエリであるLINQをEDMに行う機能を指します。C#/VBといった言語に統合されており、Visual StudioのIntelliSense機能を始めとするコーディングの様々なサポートを受けることが可能です。

C#

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

Q&A

解決済

1回答

2738閲覧

C# LINQ to Entitiesでのエラー

NewNiche

総合スコア22

LINQ to Entities

LINQ to Entitiesは、言語統合クエリであるLINQをEDMに行う機能を指します。C#/VBといった言語に統合されており、Visual StudioのIntelliSense機能を始めとするコーディングの様々なサポートを受けることが可能です。

C#

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

0グッド

0クリップ

投稿2022/01/11 04:42

編集2022/01/11 04:50

前提・実現したいこと

●のコードで以下のエラーメッセージが出力されます。

LINQ to ObjectsとLINQ to Entitiesの違いが影響していると思うのですが、
解決できないため原因を教えていただきたいです。

発生している問題・エラーメッセージ

LINQ 式ノード型 'ArrayIndex' は、LINQ to Entities ではサポートされません。

該当のソースコード

C#

1 //AEntityからnumber列のデータを取得 2 var List = new List<string>(); 3 AEntity.ForEach(x => { List.Add(x.number); }); 4 5 //Listのnumberを'-'と '_'で三分割する 6 string[] ymd = trialList[0].Split(new char[] { '-', '_' }) 7 8 //AEntityのデータと比較し、table_Bと合致するものを取得 9 ● var GetEntities = context.table_B 10                .Where(x => x.Year.Tostring() == ymd[0] 11 && x.Month.Tostring() == ymd[1] 12 && x.Day.Tostring() == ymd[2]).ToList(); 13 14 15//number;string型 16//Year month day;Deciaml型

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

C#
EntityFramework
VisualStudio 2017

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

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

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

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

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

Zuishin

2022/01/11 04:54

LINQ to Entities ではクエリは SQL に変換されてデータベースに送られます。 この場合は ArrayIndex に対応する SQL が無いので失敗しています。 まず LINQ to Entities でフィルタリングしてその後 LINQ to Objects でフィルタリングするのが良いでしょう。 データベースから取得したデータに AsEnumerable() を適用すると LINQ to Entities から LINQ to Objects になりますから、Where の前にそれを入れてみてください。
退会済みユーザー

退会済みユーザー

2022/01/11 05:01

前のスレッド https://teratail.com/questions/377011 の続きですよね? 質問欄を編集してそのことを追記してください。
guest

回答1

0

ベストアンサー

エラーメッセージでググると一番最初にヒットする以下の記事(一時変数を使う案)は見ましたか?

LINQ式ノードタイプ「ArrayIndex」は、LINQ to Entitiesではサポートされていません
https://www.webdevqa.jp.net/ja/c%23/linq%E5%BC%8F%E3%83%8E%E3%83%BC%E3%83%89%E3%82%BF%E3%82%A4%E3%83%97%E3%80%8Carrayindex%E3%80%8D%E3%81%AF%E3%80%81linq-to-entities%E3%81%A7%E3%81%AF%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%9B%E3%82%93/941022224/

//Year month day;Deciaml型

・・・ということなので、ToString() を使わなくて済むよう decimal 型の一時変数を 3 つ使う、それらの一時変数には ymd[0], ymd[1], ymd[2] を decimal にパースして代入する。

投稿2022/01/11 07:02

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

NewNiche

2022/01/13 02:25

対応おくれてしまい、申し訳ございません。 一時変数を使う方法、AsEnumerableを使う方法、 ともに実行できました。 コメント、回答してくださり、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問