要在ICollection导航属性中与数组匹配的Lambda表达式

时间:2017-08-27 04:16:37

标签: c# lambda icollection

我有以下代码优先实体 -

public class Contact
{
    public Contact()
    {
        this.Tags = new HashSet<Tag>();
    }

    public int ContactId { get; set; }
    public string ContactName { get; set; }     
    public virtual ICollection<Tag> Tags { get; set; }
}

public class Tag
{
    public Tag()
    {
        this.Contacts = new HashSet<Contact>();
    }

    public int TagId { get; set; }
    public string TagName { get; set; }
    public virtual ICollection<Contact> Contacts { get; set; }
}

我想根据字符串数组中的Tags属性搜索联系人。类似于以下内容 -

//string[] tags
Select from Db.Contacts where any Tag matched with any item in arrTags

我无法弄清楚如何在lambda中完成它。有什么帮助吗?

1 个答案:

答案 0 :(得分:2)

你可以试试这个

var query = ctx.Contacts
            .SelectMany(x => x.Tags)
            .Where(z => YourTagArray.Contains(z.TagName);

编辑:

获取匹配的联系人

var query = ctx.Contacts.Where(x => x.Tags.Any(t => YourTagArray.Contains(t.TagName));