查询LINQ不起作用

时间:2014-09-24 10:59:44

标签: .net asp.net-mvc linq asp.net-mvc-4 razor

我有一种无法正常工作的控制器方法。 这是方法:

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&#39; int []&#39;不包含&#39;包含&#39;的定义和最好的扩展方法重载&#39; System.Linq.ParallelEnumerable.Contains(System.Linq.ParallelQuery,TSource)&#39;

  • Error1参数实例:无法转换为&#39; int []&#39;到&#39; System.Linq.ParallelQuery&#39;

请帮助我。谢谢!

2 个答案:

答案 0 :(得分:2)

第一期:

您正在将传递的字符串转换为int数组,然后尝试在其上运行Contains方法(数组中不存在)。

请尝试ToList(),因为它有Contains方法。

e.g:

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

第二期:

由于您的成员变量是int?(即。nullable<int>),您还需要更改第二个查询以使用Value的{​​{1}}属性。

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)); 永远不会 null 。如果它可以 null ,您可能需要更改id_utente_servizi条款,如下所示:Where

答案 1 :(得分:0)

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

如果我用错误的参数调用.Contains,我会得到一个类似的错误:

servizi.Contains("not an int");

&#39; INT []&#39;不包含&#39;包含&#39;的定义和最好的扩展方法重载&#39; System.Linq.Queryable.Contains(System.Linq.IQueryable,TSource)&#39;有一些无效的论点

实例参数:无法转换为&#39; int []&#39;到了System.Linq.IQueryable&#39;