2014-09-24 80 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