gpt4 book ai didi

c# - 当前上下文中不存在名称 'con'

转载 作者:行者123 更新时间:2023-11-30 13:07:37 28 4
gpt4 key购买 nike

我正在尝试使用 LINQ 按语句进行分组。我收到错误名称“con”在当前上下文中不存在。

在选择后的代码中,我试图获取 ActivityID 值,但列表“con”不可用。

List<Contribution> contributions =
contLogic.GetAllContibutionsByActivityIDToList(ActivityID);

var groups = from con in contributions
group con by con.Response
into gResponse
select new
{
grop = gResponse.Count(),
con.ActivityID
};

我看过 Microsoft 示例,但我不知道我做错了什么。

微软示例:

List<Product> products = GetProductList();

var orderGroups = from prod in products
group prod by prod.Category into prodGroup
select new { Category = prodGroup.Key, Products = prodGroup };

ObjectDumper.Write(orderGroups, 1);

最佳答案

into 子句是一个查询延续子句。查询延续从作用域中删除所有先前的范围变量,然后引入一个新的范围变量

这可能不是很清楚。让我举一个例子来更好地证明这一点。

我有一双棕色的眼睛;我姐姐有蓝眼睛。假设我们想找到所有像我这样的人:有一个蓝眼睛 sibling 的棕色眼睛的人。我们可以这样做:

var parentsWithABlueEyedChild = 
from parent in parents
where parent.Children.Any(c=>c.EyeColor == Blue)
select parent;

var brownEyedChildren =
from parentWithABlueEyedChild in parentsWithABlueEyedChild
from child in parentWithABlueEyedChild.Children
where child.EyeColor == Brown
select child;

好的,您有两个查询。第二个查询对第一个查询的结果 进行操作。现在,您在这里同意“parent”不在第二个查询的范围内,对吗? “父”范围变量仅在声明它的查询中有意义。

您可以像这样将这两个查询合并为一个查询:

var brownEyedChildren = 
from parentWithABlueEyedChild in (
from parent in parents
where parent.Children.Any(c=>c.EyeColor == Blue)
select parent)
from child in parentWithABlueEyedChild.Children
where child.EyeColor == Brown
select child;

同样,这里很清楚“parent”仅在“inner”查询的范围内,对吗?

但是与第一种语法相比,这种语法很难阅读;为什么“parentWithABlueEyedChild”在使用前引入了三行?第一个版本更清楚。我们可以将其变成一个查询,同时通过查询延续保持第一个版本的可读性:

var brownEyedChildren = 
from parent in parents
where parent.Children.Any(c=>c.EyeColor == Blue)
select parent into parentWithABlueEyedChild
from child in parentWithABlueEyedChild.Children
where child.EyeColor == Brown
select child;

与前两个版本完全相同。延续只是一种方便。 parent 不在继续子句的范围内,因为如果将它们写成两个查询,它就不会在范围内。

现在清楚为什么“con”不在您的延续范围内了吗?您的查询

var q = 
from con in contributions
group con by con.Response
into gResponse
select new
{
grop = gResponse.Count(),
con.ActivityID
};

完全一样

var gResponses = 
from con in contributions
group con by con.Response;
var q =
from gResponse in gResponses
select new
{
grop = gResponse.Count(),
con.ActivityID
};

“con”不在第二个查询的范围内;它只是第一个查询的一部分。

关于c# - 当前上下文中不存在名称 'con',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8592821/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com