2017-08-29 11 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();