Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.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_Parsing_Sprache - Fatal编程技术网

C# 丢弃LINQ的行;从「;陈述

C# 丢弃LINQ的行;从「;陈述,c#,linq,parsing,sprache,C#,Linq,Parsing,Sprache,我正在使用Sprache库,它允许使用LINQ构建解析器。然而,有时我需要解析一些东西,然后丢弃结果。例如: from key in Identifier from __ws1 in OptionalWhitespace from __setter in PropertySetter from __ws2 in OptionalWhitespace from value in PropertyValue select ... 我不需要这三个变量中的任何一个加上前缀\uuu,因此似乎没有必要用它

我正在使用Sprache库,它允许使用LINQ构建解析器。然而,有时我需要解析一些东西,然后丢弃结果。例如:

from key in Identifier
from __ws1 in OptionalWhitespace
from __setter in PropertySetter
from __ws2 in OptionalWhitespace
from value in PropertyValue
select ...
我不需要这三个变量中的任何一个加上前缀
\uuu
,因此似乎没有必要用它们污染名称空间


有什么方法可以执行LINQ查询并放弃这三个结果吗?

没有对Sprache的深入了解,我已经对示例进行了超级简化,以理解问题域

以多个from语句(使用LinqPad)为例,其中我们只对from的一个值感兴趣。所以在这个任意的例子中,我们想知道所有人和蛋糕的组合,但只对蛋糕的名字感兴趣

var people = new List<string> {
    "Billy", "Jimmy"
};

var cake = new List<string> {
    "Carrot Cake", "Chocolate Cake"
};

(from p in people
from c in cake
select new
{
    c
}).Dump();
你还是会和那个“人”情人在一起


因此,我建议,为了保持斯普拉奇的意图,没有一种方法可以不做这些陈述。除非你自己建立表达式树,但我无法想象这会有什么效果。

由于没有对Sprache的深入了解,我已经对示例进行了超级简化,以理解问题域

以多个from语句(使用LinqPad)为例,其中我们只对from的一个值感兴趣。所以在这个任意的例子中,我们想知道所有人和蛋糕的组合,但只对蛋糕的名字感兴趣

var people = new List<string> {
    "Billy", "Jimmy"
};

var cake = new List<string> {
    "Carrot Cake", "Chocolate Cake"
};

(from p in people
from c in cake
select new
{
    c
}).Dump();
你还是会和那个“人”情人在一起


因此,我建议,为了保持斯普拉奇的意图,没有一种方法可以不做这些陈述。除非您自己构建表达式树,但我无法想象这会有什么效果。

在这种情况下,您可以使用
然后
立即丢弃所有不相关的部分:

var parser =
    from key in Identifier
    from _ in OptionalWhitespace
        .Then(_ => PropertySetter)
        .Then(_ => OptionalWhitespace)
    from value in PropertyValue
    select new
    {
        key,
        value
    };

但在一般情况下,如果无关部分没有立即相互跟随,则不会有帮助。

在这种特殊情况下,您可以使用
然后
立即丢弃所有无关部分:

var parser =
    from key in Identifier
    from _ in OptionalWhitespace
        .Then(_ => PropertySetter)
        .Then(_ => OptionalWhitespace)
    from value in PropertyValue
    select new
    {
        key,
        value
    };

但在一般情况下,如果不相关的部分不立即相互跟随,则不会有帮助。

Sprache实现LINQ查询方法,用于解析器函数的一元绑定,就像解析器组合器一样。 (LINQ可以用于比查询EF数据库集更有趣的事情。)
遗憾的是,LINQ查询范围变量(尚未)不支持丢弃,因此您的“\u1”范围变量将在范围内发生冲突。当一个查询中有多个变量时,我通常会将不需要的范围变量命名为“\N”(其中[1..]中的N),并希望在它们得到支持时记住使用适当的丢弃。Sprache为解析器函数的一元绑定(如解析器组合器)实现LINQ查询方法。 (LINQ可以用于比查询EF数据库集更有趣的事情。)
遗憾的是,LINQ查询范围变量(尚未)不支持丢弃,因此您的“\u1”范围变量将在范围内发生冲突。当我在一个查询中有多个变量时,我通常会将不需要的范围变量命名为“\N”(其中[1..”中的N),并希望在它们得到支持时记住使用适当的丢弃方法。

?你能稍微扩展一下你的示例,让我们看看其他表是如何使用的吗?@Alex KeySmith这不是一个数据库查询,它是使用Sprache库构建的解析器规则。对不起,我使用的术语“表”可能没有意义。我不确定你的其他收藏是如何被使用的。我猜您是在尝试获取某种程度上嵌套在标识符中的PropertyValue?你能稍微扩展一下你的例子吗,因为它有助于理解你的问题领域。哦,我明白了,看看sprache网站上的例子,我猜这些都出现在select语句中了?在他们的例子中,这只是Sprache建立表达式的一种方式,即使你不需要它们。有点奇怪,可能是我对表达式缺乏深入的理解,即使它没有在select或where中使用,或者显然在自己的代码中没有使用,它仍然被使用。我猜你在某个地方有一个where或join来链接表?你能稍微扩展一下你的示例,让我们看看其他表是如何使用的吗?@Alex KeySmith这不是一个数据库查询,它是使用Sprache库构建的解析器规则。对不起,我使用的术语“表”可能没有意义。我不确定你的其他收藏是如何被使用的。我猜您是在尝试获取某种程度上嵌套在标识符中的PropertyValue?你能稍微扩展一下你的例子吗,因为它有助于理解你的问题领域。哦,我明白了,看看sprache网站上的例子,我猜这些都出现在select语句中了?在他们的例子中,这只是Sprache建立表达式的一种方式,即使你不需要它们。有点奇怪,可能是我对表达式缺乏深入的理解,即使它没有在select或where中使用,或者显然在自己的代码中没有使用,它仍然被使用。你已经完全理解了这个问题-很遗憾没有办法丢弃这些值。我想这不是一件平常的事。谢谢你的回答你已经完全理解了这个问题-很遗憾没有办法放弃这些价值观。我想这不是一件平常的事。谢谢你的回答