将本机JSON数组作为LINQ包含的参数

时间:2017-08-29 14:25:41

标签: arrays entity-framework linq react-native fetch

我想获得一个与用户具有相同标签的人员列表。 为此我需要使用react native fetch和实体框架。 我也尝试过一些带有EF的原始sql,但是无法使它工作,只是不知道如何。

我有两个提取。两者都返回典型的JSON对象数组。所以我这样做:

   override func viewDidLoad() {
    super.viewDidLoad()

    //INPUT BOX - User Input!
    let Answer : UITextField = UITextField(frame: CGRect(x: 35, y: 150, width: 250, height:50))
    Answer.placeholder = "Enter Your Answer"
    Answer.font = UIFont.init(name:"times", size: 24)
    Answer.backgroundColor = UIColor(red:0xff ,green:0xff, blue:0x88 ,alpha:1)
    self.view.addSubview(Answer)

    //BUTTON - Check Answer!
    let Button : UIButton = UIButton(frame: CGRect(x: 35, y: 200, width: 250, height:50))
    Button.setTitle("Submit Answer", for: .normal)
    Button.titleLabel!.font = UIFont.init(name:"times", size: 24)
    Button.backgroundColor = UIColor(red:0x00 ,green:0x00, blue:0x00 ,alpha:1)
    Button.addTarget(self, action: #selector(CheckAnswer), for: .touchUpInside)
    self.view.addSubview(Button)
}

func CheckAnswer(_ sender: UIButton){
    if Answer.text == "answer" || Answer.text == "Answer"      
    { print("Correct ! Response") }
    else { print("Incorrect x Response") }
  }

tags变量是来自React Native Fetch的对象数组,在我的C#函数中属于var users = db.Users .Include("TagUsers") .Where(u => u.TagUsuario.Any(t => tags.Contains(t.idTag))).ToList(); 类型。

问题是如果这个数组有一个元素,比如IList<>long或者像这样的提取

const tags = [1];

我可以返回带有此标记的人,但如果我喜欢这个{0} Tags: idTag: 1 Name: "MyTag"

const tags = [1, 2];

它在我的LINQ请求中没有返回任何内容。

但如果我在C#函数上做了类似的事情:

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

效果很好。

这里的问题是fetch中的对象数组与LINQ语句(Any,Contains)不“兼容”。所以我正在寻找替代方案。

我该怎么办? 更改IList参数?我正在使用它,因为接受null而不会崩溃。 改变LINQ? 使用Raw SQL? 也许有些转换只能获得带有标签的int数组,而不是对象。

感谢任何提示和解决方案。

1 个答案:

答案 0 :(得分: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();