2017-08-29 11 views
0

ユーザーと同じタグを持つユーザーのリストを取得します。 そのためには、ネイティブフェッチとエンティティフレームワークを使用する必要があります。 私もEFでraw SQLを試しましたが、動作させることができませんでした。LINQのパラメータとしてネイティブJSON配列に反応します。

私は2つのフェッチを持っています。どちらも典型的なJSONオブジェクト配列を返します。だから私はこれをやっている:

var users = db.Users 
.Include("TagUsers") 
.Where(u => u.TagUsuario.Any(t => tags.Contains(t.idTag))).ToList(); 

タグ変数は、ネイティブが私のC#関数にタイプIList<>longである、フェッチ・リアクトからオブジェクト配列です。

問題は、この配列は、一つの要素を持っている場合は、このconst tags = [1];またはこの

{0} 
Tags: 
idTag: 1 
Name: "MyTag" 

のようにフェッチからのように、私はこのタグを持つ人々を返すことができますが、私はこのconst tags = [1, 2];または

好きならばということです
{0} 
    Tags: 
    idTag: 1 
    Name: "MyTag" 
{1} 
    Tags: 
    idTag: 2 
    Name: "AnotherTag" 

LINQリクエストで何も返されません。

は、しかし、私は私のC#関数にこのような何かを行う場合:

IList<>long tags = new List<>long(); 
tags.Add(1); 
tags.Add(2); 

は、それは完璧に動作します。

ここでの問題は、フェッチからのオブジェクト配列がLINQステートメント(Any、Contains)と "互換"でないことです。だから私は代替手段を探しています。

私は何をしなければなりませんか? IListパラメータを変更しますか?私はクラッシュせずにnullを受け入れるので、それを使用しています。 LINQを変更しますか? Raw SQLを使用しますか? オブジェクト配列ではなく、タグを持つint配列だけを取得する変換があるかもしれません。

ご協力いただきありがとうございます。

+0

'tags 'を配列に投影できますか?たとえば、 'tags.Select(t => t.idTag) ' – Shoe

+0

IListで" AsEnumerable() "を呼び出すと、 – barakcaf

答えて

0

タグからidTagsを取得して、以下のように使用できますか?

var idTags = tags.Select(t => t.idTag); 
var users = db.Users 
       .Include("TagUsers") 
       .Where(u => u.TagUsuario.Any(t => idTags.Contains(t.idTag))).ToList(); 
関連する問題