【问题标题】:Check if ICollection contains an element based on a property [duplicate]检查 ICollection 是否包含基于属性的元素 [重复]
【发布时间】:2019-02-23 19:31:22
【问题描述】:

在 C-Sharp 中,我有一个 Registrations 类,它基本上创建了一个 Questions 项目列表,如下所示:

public partial class Registrations
{
    public Registrations()
    {
        this.Questions = new HashSet<Questions>();
    }

    public int id { get; set; }
    public virtual ICollection<Questions> Questions { get; set; }
}

我的Questions 类有一个名为Title 的字段,它只提供表单字段标签。

public partial class Questions
{
    public int id { get; set; }
    public int registrationId { get; set; }
    public string Title { get; set; }
    public string Data { get; set; }
}

当用户创建注册时,他可以添加许多不同标题的问题。我想检查特定注册是否有标题为“城市”的字段。我想在我的 Registrations 类中创建一个名为 hasCity 的函数,该函数将返回 boolean,具体取决于特定注册是否具有该字段。

public hasCity()
{
    Questions city = new Questions();
    city.Title = "City";
    if( this.Questions.Contains( city ) )
    {
        return true;
    }
    return false;
}

现在,上面的函数总是返回false,我猜这是因为我需要创建某种方法来仅检查字符串值CityTitle属性。

【问题讨论】:

  • 也许你需要改变(this.Qestions.Contains(city=="City"))这样的条件才能给出真值。

标签: c# icollection


【解决方案1】:

我认为您可以为此使用 LinQ 中的 Any 方法。试试下面的。希望对你有所帮助,我的朋友:

public partial class Questions
    {
        public int id { get; set; }
        public int registrationId { get; set; }
        public string Title { get; set; }
        public string Data { get; set; }
    }

    public partial class Registrations
    {
        public Registrations()
        {
            this.Questions = new HashSet<Questions>();
        }

        public int id { get; set; }
        public virtual ICollection<Questions> Questions { get; set; }
        public bool HasCity(string titleCity)
        {            
            if (this.Questions.Any(x => x.Title.ToLower() == titleCity.ToLower()))
            {
                return true;
            }
            return false;
        }
    }

【讨论】:

  • ICollection 中没有Any 的定义,ICollection 中唯一的方法是:AddClearContainsCopyToCountEqualsGetEnumeratorGetHashCodeGetTypeIsReadOnlyRemoveToString,否则你的解决方案会很棒。
  • @Tales:只需添加命名空间:使用 System.Linq,我的朋友 :))
  • 添加using System.Linq解决了这个问题,谢谢。
  • @Tales:玩得好,我的朋友:d
猜你喜欢
  • 2016-10-25
  • 2021-12-14
  • 2015-12-19
  • 1970-01-01
  • 2013-02-20
  • 1970-01-01
  • 1970-01-01
  • 2021-05-24
  • 1970-01-01
相关资源
最近更新 更多