这个单语句查询整洁地说:“给我一个裸文件名列表,该文件的原始文件名是包含特定文件结构的ZIP存储库。”
但是我同时使用.Where()扩展方法(流利的语法)和选择查询,因为我尝试的其他任何操作均无法编译。如果我将“ .Where(file ==> <statement>)”更改为“ where <statement>”,则会收到错误消息,即匿名方法代码不返回布尔值,并且如果更改了“ select <clause>”到“ .Select(<clause>)”,错误是“未使用选择子句”。
我对查询或流利的语法感到满意,但我想选择其中一种。谁能解释为什么这行不通,以及我需要做什么才能确定一种一致的语法?
return (from file in Directory.EnumerateFiles(
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), Globals.CompanyName, ProjectName, FolderName),
imageExtension,
SearchOption.TopDirectoryOnly)
.Where(file =>
{
try
{
string relativePath = ClassFru.Station + "/"; // Inside ZIPs, paths use a single forward slash
var zip = new ZipFile();
zip.ZipError += (s, o) => { throw new Exception(); };
using (zip = ZipFile.Read(file))
{
/// <todo>if (zip.Comment != Globals.CompanyName) { return false; }</todo>
foreach (var fru in this.gFrus)
{
var fruPath = relativePath + fru.Id + '.';
if (!(from e in zip where !e.IsDirectory && e.FileName.StartsWith(fruPath) select true).Any()) { return false; }
}
return true;
}
}
catch (Exception)
{
return false;
}
})
select Path.GetFileNameWithoutExtension(file)).ToArray();
由于我没有在此表达式中使用的所有类型,因此很难对其进行编译,但是我认为我应该像这样工作:
return (Directory.EnumerateFiles(
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData),
Globals.CompanyName, ProjectName, FolderName),
imageExtension,
SearchOption.TopDirectoryOnly)
.Where(file => {
try
{
string relativePath = ClassFru.Station + "/"; // Inside ZIPs, paths use a single forward slash
var zip = new ZipFile();
zip.ZipError += (s, o) => {
throw new Exception();
};
using (zip = ZipFile.Read(file))
{
/// <todo>if (zip.Comment != Globals.CompanyName) { return false; }</todo>
foreach (var fru in this.gFrus)
{
var fruPath = relativePath + fru.Id + '.';
if(zip.Any(e=> !e.IsDirectory && e.FileName.StartsWith(fruPath))
.Any())
{
return false;
}
}
return true;
}
} catch (Exception)
{
return false;
}
}).Select(Path.GetFileNameWithoutExtension).ToArray());
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句