2017-08-29 27 views
0

我想獲取與用戶具有相同標記的人員列表。 爲此,我需要使用反應原生提取和實體框架。 我也嘗試了一些原始的SQL與EF,但無法使它的工作,只是不知道如何。將原生JSON數組作爲參數反饋到LINQ包含中

我有兩次抓取。兩者都返回一個典型的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? 使用原始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();