错误:string []不包含'包含'的定义 - 工作但不起作用

时间:2017-08-31 19:16:33

标签: c# asp.net-mvc entity-framework

使用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;

1 个答案:

答案 0 :(得分:4)

错误基本上表示类型不匹配。 Branch.id的数据库列是整数,msSites[]是字符串数组。您尝试使用Containsstringint进行比较而不进行类型转换。

选项1 由于id似乎始终是一个int,因此您可以重构您的方法以接受int[] msSites,这可能会解决问题。

选项2 如果您无法将参数类型更改为方法,则可以尝试将a.Branch.Id转换为Contains调用中的字符串。