Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用Linq检查字符串列表中是否包含任何字符串_C#_Linq_List_Contains - Fatal编程技术网

C# 如何使用Linq检查字符串列表中是否包含任何字符串

C# 如何使用Linq检查字符串列表中是否包含任何字符串,c#,linq,list,contains,C#,Linq,List,Contains,我正在构造一个linq查询,它将检查数据库中的字符串是否包含字符串列表中的任何字符串 差不多 query = query.Where(x => x.tags .Contains(--any of the items in my list of strings--)); 我还想知道列表中有多少项是匹配的 任何帮助都将不胜感激 更新:我应该提到标签是一个字符串而不是一个列表。在查询实际运行之前,我添加了一些与标记无关的内容。这是针对实体框架运行的 像这样

我正在构造一个linq查询,它将检查数据库中的字符串是否包含字符串列表中的任何字符串

差不多

query = query.Where(x => x.tags
                   .Contains(--any of the items in my list of strings--));
我还想知道列表中有多少项是匹配的

任何帮助都将不胜感激

更新:我应该提到标签是一个字符串而不是一个列表。在查询实际运行之前,我添加了一些与标记无关的内容。这是针对实体框架运行的

像这样:

List<string> list = new List<string>();
list.Add("One");
list.Add("Two");

 var result = query.Where(x => list.Contains(x.tags));
List List=新列表();
列表。添加(“一”);
列表。添加(“两个”);
var result=query.Where(x=>list.Contains(x.tags));

编辑:这个答案假设
标签是字符串的集合

听起来你可能想要:

var list = new List<string> { ... };
var query = query.Where(x => x.tags.Any(tag => list.Contains(tag));
然后,
result
的每个元素是一对
x
(项目)和
count
(匹配标记的数量)。

var t=新列表{“a”、“b”、“c”};
var y=“a b d”


var res=y.Count(x=>t.Contains(x.ToString())

从你的问题来看,我不太确定x.tags是字符串还是列表,如果它是列表,Jon Skeet的答案是正确的。如果我理解正确,尽管x.tags是一个字符串。如果是,那么解决方案是:

list.Any(x => x.tags.IndexOf(x) > -1)
数一数

list.Count(x => x.tags.IndexOf(x) > -1)

我以前做过类似的事情:

var myList = new List<string>();
myList.Add("One");
myList.Add("Two");

var matches = query.Where(x => myList.Any(y => x.tags.Contains(y)));
var myList=new List();
我的清单。添加(“一”);
myList.添加(“两个”);
var matches=query.Where(x=>myList.Any(y=>x.tags.Contains(y));

我最近遇到了一个类似的问题,下面是我如何解决的:

var list = [list of strings];
if (list != null && list.Any())
{
    queryable = queryable.Where(x => x.tags != null);
    var tagQueries = new List<IQueryable<WhateverTheDbModelIs>>();
    foreach (var element in list)
    {
        tagQueries.Add(queryable.Where(x => x.tags.Contains(element)));
    }
    IQueryable<WhateverTheDbModelIs> query = tagQueries.FirstOrDefault();
    foreach (var tagQuery in tagQueries)
    {
        query = query.Union(tagQuery);
    }
    queryable = queryable.Intersect(query);
}
var list=[字符串列表];
if(list!=null&&list.Any())
{
queryable=queryable.Where(x=>x.tags!=null);
var tagquerys=new List();
foreach(列表中的var元素)
{
添加(queryable.Where(x=>x.tags.Contains(element));
}
IQueryable query=tagQueries.FirstOrDefault();
foreach(tagquerys中的var tagQuery)
{
query=query.Union(tagQuery);
}
queryable=queryable.Intersect(查询);
}

可能不是最好的选择,但经验较少的开发人员可以理解和使用

因此,
x.tags
也是一个列表吗?您能给出一些示例输入和输出吗?您可能希望使用PredicateBuilder,但“知道匹配了多少项”可能会使事情进一步复杂化。
包含
不接受项序列,因为它是参数OP声明x.tags是一个字符串,尽管我仍然不确定这个问题,如果x.tags与列表完全匹配,那么这个问题会起作用。如果我想有同样的效果呢?说只要标签是“一个牛奶”,“一个冰箱”。。。目前,它只会在标记为“一”时返回。不,我很确定这不是OP所要求的。如果标记是字符串,这是否仍然适用?不,您需要更改它-我假设as
tags
是复数,它是标记的集合。如果它是单个值,为什么称为“标记”?还是逗号分隔的值?这会让事情变得更复杂,它是一个逗号分隔的字符串。希望能够检查列表中的任何螫针是否在分隔的值字符串中。@Lrayh:你怎么能指望我们猜到这就是你的意思?这是EF,Linq到Sql,其他的吗?对不起,我第一次提出这个问题时没有想到。使用EF。在先前的原始问题中添加了该部分。
list.Count(x => x.tags.IndexOf(x) > -1)
var myList = new List<string>();
myList.Add("One");
myList.Add("Two");

var matches = query.Where(x => myList.Any(y => x.tags.Contains(y)));
var list = [list of strings];
if (list != null && list.Any())
{
    queryable = queryable.Where(x => x.tags != null);
    var tagQueries = new List<IQueryable<WhateverTheDbModelIs>>();
    foreach (var element in list)
    {
        tagQueries.Add(queryable.Where(x => x.tags.Contains(element)));
    }
    IQueryable<WhateverTheDbModelIs> query = tagQueries.FirstOrDefault();
    foreach (var tagQuery in tagQueries)
    {
        query = query.Union(tagQuery);
    }
    queryable = queryable.Intersect(query);
}