Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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-dons';t以前缀范围内的任何前缀开头_C#_Linq - Fatal编程技术网

C# Linq-dons';t以前缀范围内的任何前缀开头

C# Linq-dons';t以前缀范围内的任何前缀开头,c#,linq,C#,Linq,我需要创建一个具有以下逻辑的Linq查询: IEnumerable<string> prefixes = GetListOfPrefixesFromSomewhere(); IQueryable<Record> myQuery = GetAllRecordsFromRepository(); foreach (string prefix in prefixes) { myQuery = myQuery.Where(x => !x.Field.StartsWith

我需要创建一个具有以下逻辑的Linq查询:

IEnumerable<string> prefixes = GetListOfPrefixesFromSomewhere();
IQueryable<Record> myQuery = GetAllRecordsFromRepository();
foreach (string prefix in prefixes)
{
  myQuery = myQuery.Where(x => !x.Field.StartsWith(prefix));
}
IEnumerable prefixes=GetListOfPrefixesFromSomewhere();
IQueryable myQuery=GetAllRecordsFromRepository();
foreach(前缀中的字符串前缀)
{
myQuery=myQuery.Where(x=>!x.Field.StartsWith(前缀));
}
这显然会产生一个大的IQueryable,然后可以执行它


是否有一种优雅的方式来表达这是一个Linq语句?

您至少可以尝试以下方法:

//当然,只有在需要时才调用ToList。。。但我认为EF/LINQ是SQL的一部分
//将需要它作为列表(或数组)
列表前缀=GetListOfPrefixesFromsomeone().ToList();
IQueryable query=GetAllRecordsFromRepository()
.Where(x=>!prefixes.Any(prefix=>x.Field.StartsWith(prefix));

SQL将是什么样子,我不知道-但我认为这在逻辑上是您想要的,这通常是一个好的开始。

“要表达这是一个单一的Linq语句?”这是否意味着当前版本正在工作?是的,我想这是一个重构问题。Skeet,我希望从您那里得到答案。我的问题是幸运的!关于您的警告,没关系-我对您如何用Linq表达需求感兴趣。Linq提供商将如何利用它,他妈的知道!
// Only call ToList if you need to, of course... but I think EF/LINQ To SQL
// will need it as a list (or array)
List<string> prefixes = GetListOfPrefixesFromSomewhere().ToList();

IQueryable<Record> query = GetAllRecordsFromRepository()
             .Where(x => !prefixes.Any(prefix => x.Field.StartsWith(prefix)));