使用MVC5应用程序。我对这个有点困惑....我有2个变量,都定义为字符串数组(msUsers和msSites)。一个,msUsers,允许我使用"包含",另一个不允许。这是代码的片段....
private IQueryable<Event> GetEventsFiltered(
string userName,
string workStatus,
string[] msUsers,
string[] msSites,
int? eventTypeId)
{
IQueryable<Event> events = this.db.Events;
if (msUsers != null)
{
events = events.Include(a => a.AspNetUser)
.Where(a => msUsers.Contains(a.AspNetUser.Id));
}
if (msSites != null)
{
// It doesn't like Contains here....
events = events.Include(a => a.Branch)
.Where(a => msSites.Contains(a.Branch.Id));
}
错误(针对最后一个&#34;包含&#34;)...
'string[]' does not contain a definition for 'Contains' and the best extension method
overload 'Queryable.Contains<int>(IQueryable<int>, int)' requires a receiver of type
'IQueryable<int>'
我有点困惑,因为Contains的第一次使用对SAME类型的变量有效。有什么建议/想法吗?谢谢!
*****更新以添加NAMESPACES ******
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Web.Mvc;
using System.Web.Security;
using AuditingApp.Models;
using AuditingApp.Services;
using AuditingApp.ViewModels;
using Microsoft.AspNet.Identity;
答案 0 :(得分:4)
错误基本上表示类型不匹配。 Branch.id
的数据库列是整数,msSites[]
是字符串数组。您尝试使用Contains
将string
与int
进行比较而不进行类型转换。
选项1
由于id似乎始终是一个int,因此您可以重构您的方法以接受int[] msSites
,这可能会解决问题。
选项2
如果您无法将参数类型更改为方法,则可以尝试将a.Branch.Id
转换为Contains
调用中的字符串。