Linq选择列表中的位置

时间:2015-02-23 12:59:56

标签: c# linq

我有以下课程

public class Group
{
    public string Id { get; set; }
    public string Name { get; set; }
}

和2列出了List<string> groupRestrictList<Group> groups

现在组列表包含一些填写了所有字段的组,我想选择所有受限制的组,groupRestrict列表只包含组的名称。

我尝试了一些东西,但由于某些原因,它总是返回一个空列表。这是我的最后一次测试:

var lst = groups.Where(j => groupRestrict.Contains(j.Name)).ToList();

有什么可能出错的线索?

编辑:就像评论说的那样,这应该有效,输入有一些'但现在我想让groupRestrict没有确切的名称,但可以使用&#39; like&#39;特征

当前表达:

var restrictedGroups = (from gr in groupRestrict join g in groups on gr equals g.Name select g).ToList();

1 个答案:

答案 0 :(得分:2)

尝试:

var lst = groups.Where(j => groupRestrict.Any(x=> j.Name.Contains(x))).ToList();

这将匹配名称中包含来自searchList的一个或多个字符串的所有组。

不区分大小写的变体将是:

var lst = groups.Where(j => groupRestrict.Any(x=> j.Name.ToLower().Contains(x.ToLower()))).ToList();

尽管在这种情况下最好将groupRestrict转换为查询之前的小写,并且可以省略对.x的.ToLower()调用:

string[] lowerCaseGroupRestrict = groupRestrict.Select(x=> x.ToLower()).ToArray();
var lst = groups.Where(j => lowerCaseGroupRestrict.Any(x=> j.Name.ToLower().Contains(x))).ToList();