簡體   English   中英

錯誤:string []不包含“包含”的定義-有效且無效

[英]Error: string[] does not contain a definition for 'Contains' - works and doesn't work

在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));
        }

錯誤(針對最后一個“包含”)...

 '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類型的變量正常工作。 有什么建議/想法嗎? 謝謝!

*****更新以添加名稱空間******

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;

該錯誤基本上表示類型不匹配。 您的Branch.id數據庫列是一個整數,而您的msSites[]是一個字符串數組。 您正在嘗試使用Containsstringint進行比較而不進行類型轉換。

選項1由於id似乎始終是一個int,因此您可以重構您的方法以接受int[] msSites ,這可能會解決問題。

選項2如果無法將參數類型更改為方法,則可以嘗試在Contains調用中將a.Branch.Id轉換為字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM