实体框架包含整数数组

Can*_*SER -1 .net arrays select entity-framework contains

public void GetMuscles(List<ListItem> selected)
 {
     int[] arrayOfStrings = new int[selected.Count];

     for (int i = 0; i < selected.Count; i++)
     {
         arrayOfStrings[i] = Convert.ToInt32(selected[i].Value);
     }  
}  

using (var db = new DWSEntities())
{
     var muscles = (from m in db.Muscles
         where m.MainMusleGroupID. //ISSUE
         select new { m.MusleName, m.ID }).Take(40);
}
Run Code Online (Sandbox Code Playgroud)

在 where 语句中,我需要使用 contains 但在“.”之后。我没有选择使用包含。我用非整数值尝试了同样的方法,它出现了。我有一个整数数组,需要 WHERE IN 子句。那么有没有其他方法可以在没有包含的情况下做到这一点,或者我如何将包含与整数值一起使用?

Stu*_*tLC 6

我的评论

SqlWHERE... IN在Linq ie中被倒置

 where MyIntArray.Contains(m.MainMusleGroupID)
Run Code Online (Sandbox Code Playgroud)

或在 lambda 语法中

db.Muscles.Where(m => MyIntArray.Contains(m.MainMusleGroupID)
Run Code Online (Sandbox Code Playgroud)

Re: int[] 不包含 'Contains 的定义

在班级的顶端,确保您拥有:

 using System.Linq;
Run Code Online (Sandbox Code Playgroud)

(以及下面的注释) 确保 Entity 字段Contains的类型与被比较的集合的类型相匹配,即MainMusleGroupID它本身必须是一个整数,以便与arrayOfInts.Contains().

回复:重构

arrayOfStrings指示整数数组(或实际上,其他数字类型,例如long)的命名约定将导致可维护性问题。

您可以arrayOfX[]使用 LINQ简化数组的创建:(注意循环和}之间有一个额外forusing):

var arrayOfLongs = selected.Select(s => Convert.ToInt64(s.Value)).ToArray();
Run Code Online (Sandbox Code Playgroud)

结果

var muscles = (from m in db.Muscles
    where arrayOfLongs.Contains(m.MainMusleGroupID)
    select new { m.MusleName, m.ID }).Take(40);
Run Code Online (Sandbox Code Playgroud)

或者在 Lambda 语法中:

var musclesLambda = db.Muscles
    .Where(m => arrayOfLongs.Contains(m.MainMusleGroupID))
    .Select(m => new { m.MusleName, m.ID })
    .Take(40);
Run Code Online (Sandbox Code Playgroud)

(我已经更改了数组的名称以匹配类型)