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 子句。那么有没有其他方法可以在没有包含的情况下做到这一点,或者我如何将包含与整数值一起使用?
我的评论
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简化数组的创建:(注意循环和}之间有一个额外for的using):
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)
(我已经更改了数组的名称以匹配类型)
| 归档时间: |
|
| 查看次数: |
13579 次 |
| 最近记录: |