2014-09-24 85 views
0

我有一个不起作用的控制器方法。 这是方法:查询LINQ不起作用

public ActionResult Index(DateTime? data) 
{ 
    var servizi = (Request["servizi"] ?? "").Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(n => Convert.ToInt32(n)).ToArray(); 


    if (servizi == null || servizi.Length == 0) 
    { 
     ModelState.AddModelError("servizi", "Selezionare almeno un servizio"); 
     return View(); 
    } 

    var dati = this.GetDbContext().mensilizzazioni.Include(x => x.operatore).Include(x => x.utente).Where(x => x.data1 == data.Value && servizi.Contains(x.id_utente_servizi)); 

    dati = getProfiledDatas(dati.AsQueryable<mensilizzazioni>()); 


    return View(); 
} 

这些是LINQ servizi.Contains错误:

  • 误差2“INT []”不包含“包含”的定义和最佳的扩展方法过载 'System.Linq.ParallelEnumerable.Contains(System.Linq.ParallelQuery,TSource)'

  • ERROR1参数实例:无法从 'INT []' 转换为 'System.Linq.ParallelQuery'

谁能帮帮我,谢谢。谢谢!

+0

你使用' System.Linq的;'? – Rawling 2014-09-24 11:02:31

+0

是的我正在使用System.Linq – ADC 2014-09-24 11:04:26

+0

servizi是我猜的整型数组的类型,然后你正在使用包含它的方法。 – Mukund 2014-09-24 11:06:37

回答

2

首先问题:

要转换传递给的int阵列的串,然后试图运行在一个Contains方法(其不阵列上存在)。

尝试ToList(),而不是因为它有一个Contains方法。

如:

var servizi = (Request["servizi"] ?? "").Split(new[] { ',' }, 
    StringSplitOptions.RemoveEmptyEntries).Select(n => Convert.ToInt32(n)).ToList(); 

第二期:

当你的成员变量,原来是一个int?(即nullable<int>。)您也需要改变使用Value性质的第二查询id_utente_servizi

var dati = this.GetDbContext().mensilizzazioni.Include(x => x.operatore).Include(x => x.utente).Where(x => x.data1 == data.Value && servizi.Contains(x.id_utente_servizi.Value)); 

这假定id_utente_servizi从不。如果能是你可能需要改变你的Where条款像这样:.Where(x => x.data1 == data.Value && x.id_utente_servizi.HasValue && servizi.Contains(x.id_utente_servizi.Value))

+0

谢谢,但与.ToList()我有这个错误: - 不能从'int?'转换到'int','System.Collections.Generic.List .Contains(int)'的最佳重载方法匹配有一些无效参数 – ADC 2014-09-25 15:29:03

+0

啊。不知道你的'id_utente_servizi'属性可能为null。已更新的答案适合:) – 2014-09-25 15:45:14

+0

哦,是啊!它是如此简单...我是多么愚蠢:D – ADC 2014-09-25 15:53:35

0

什么是x.id_utente_servizi的类型?确保它是一个整数。

如果我打电话。载有与错误的说法,我得到一个有点类似的错误:

servizi.Contains("not an int"); 

“INT []”不包含定义“包含”和最佳推广方法重载“系统.Linq.Queryable.Contains(System.Linq.IQueryable,TSource)”有

实例论证一些无效参数:不能从转换 'INT []' 到 'System.Linq.IQueryable'

+0

显示的错误'int []'没有包含'Contains'的定义,简单地说是变量'servizi'是一个int数组,它没有'Contains '方法。有一个静态的'Array.contains()',但在这里没有那么有用。 – 2014-09-25 09:48:29

+0

是的,我确定“x.id_utente_servizi”是一个INT – ADC 2014-09-25 15:04:41

+0

@TrueBlueAussie,如果你有System.Linq命名空间,那么你在所有IEnumerable 包括int []中都有.Contains方法。在我的例子中,如果我传入一个int,它就可以工作。它说没有.Contains方法,因为我给了它错误的类型,试图重现Alessio的错误。 – FarmerBob 2014-09-26 03:14:16