Entity Framework 包含整数数组
Entity Framework Contains Integer Array
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);
}
我需要在 where 语句中使用 contains 但在“.”之后我没有使用包含的选项。我用非整数值尝试了同样的方法,它出现了。我有一个整数数组,需要 WHERE IN 子句。那么有没有其他方法可以在没有包含的情况下做到这一点,或者我如何使用包含整数值?
我的评论
Sql WHERE... IN
在 Linq 中被反转,即
where MyIntArray.Contains(m.MainMusleGroupID)
或 lambda 语法
db.Muscles.Where(m => MyIntArray.Contains(m.MainMusleGroupID)
回复:int[] 不包含 'Contains
的定义
在 class 的顶部,确保您拥有:
using System.Linq;
(以及下面的评论)
确保 Contains
中使用的实体字段的类型与被比较的集合的类型相匹配,即 MainMusleGroupID
本身必须是整数,以便与 arrayOfInts.Contains()
一起使用。
回复:重构
命名约定 arrayOfStrings
表示整数数组(或者实际上,其他数字类型,例如 long
)将导致可维护性问题。
您可以使用 LINQ 简化 arrayOfX[]
数组的创建:(请注意,在 for
循环和 using
之间有一个额外的 }
:
var arrayOfLongs = selected.Select(s => Convert.ToInt64(s.Value)).ToArray();
结果
var muscles = (from m in db.Muscles
where arrayOfLongs.Contains(m.MainMusleGroupID)
select new { m.MusleName, m.ID }).Take(40);
或者在 Lambda 语法中:
var musclesLambda = db.Muscles
.Where(m => arrayOfLongs.Contains(m.MainMusleGroupID))
.Select(m => new { m.MusleName, m.ID })
.Take(40);
(我更改了数组的名称以匹配类型)
我找到了解决方案。我刚刚在这里添加了 (int):
m => arrayOfInts.Contains((int)m.MainMusleGroupID)
下面是工作代码:
var arrayOfInts = selected.Select(s => Convert.ToInt32(s.Value)).ToArray();
using (var db = new DWSEntities())
{
var muscles = db.Muscles.Where(m => arrayOfInts.Contains((int)m.MainMusleGroupID))
.Select(m => new { m.MusleName, m.ID }).Take(40);
cblMusle.DataSource = muscles.ToList();
cblMusle.DataTextField = "MusleName";
cblMainMuscle.DataValueField = "ID";
cblMusle.DataBind();
}
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);
}
我需要在 where 语句中使用 contains 但在“.”之后我没有使用包含的选项。我用非整数值尝试了同样的方法,它出现了。我有一个整数数组,需要 WHERE IN 子句。那么有没有其他方法可以在没有包含的情况下做到这一点,或者我如何使用包含整数值?
我的评论
Sql WHERE... IN
在 Linq 中被反转,即
where MyIntArray.Contains(m.MainMusleGroupID)
或 lambda 语法
db.Muscles.Where(m => MyIntArray.Contains(m.MainMusleGroupID)
回复:int[] 不包含 'Contains
的定义在 class 的顶部,确保您拥有:
using System.Linq;
(以及下面的评论)
确保 Contains
中使用的实体字段的类型与被比较的集合的类型相匹配,即 MainMusleGroupID
本身必须是整数,以便与 arrayOfInts.Contains()
一起使用。
回复:重构
命名约定 arrayOfStrings
表示整数数组(或者实际上,其他数字类型,例如 long
)将导致可维护性问题。
您可以使用 LINQ 简化 arrayOfX[]
数组的创建:(请注意,在 for
循环和 using
之间有一个额外的 }
:
var arrayOfLongs = selected.Select(s => Convert.ToInt64(s.Value)).ToArray();
结果
var muscles = (from m in db.Muscles
where arrayOfLongs.Contains(m.MainMusleGroupID)
select new { m.MusleName, m.ID }).Take(40);
或者在 Lambda 语法中:
var musclesLambda = db.Muscles
.Where(m => arrayOfLongs.Contains(m.MainMusleGroupID))
.Select(m => new { m.MusleName, m.ID })
.Take(40);
(我更改了数组的名称以匹配类型)
我找到了解决方案。我刚刚在这里添加了 (int):
m => arrayOfInts.Contains((int)m.MainMusleGroupID)
下面是工作代码:
var arrayOfInts = selected.Select(s => Convert.ToInt32(s.Value)).ToArray();
using (var db = new DWSEntities())
{
var muscles = db.Muscles.Where(m => arrayOfInts.Contains((int)m.MainMusleGroupID))
.Select(m => new { m.MusleName, m.ID }).Take(40);
cblMusle.DataSource = muscles.ToList();
cblMusle.DataTextField = "MusleName";
cblMainMuscle.DataValueField = "ID";
cblMusle.DataBind();
}