c# - 如何重写代码以将匿名类型分配给列表框
问题描述
有人可以帮我重新编写以下代码吗?我需要同时拥有 groupId 和 groupName 来设置列表框的数据字段。
if (categoryId == null)
{
var groups = usersData.Where(g => g.groupName != null).Select(g => new { groupId = g.groupId, groupName = g.groupName }).Distinct();
}
else
{
var groups = usersData.Where(g => g.categoryId == Convert.ToInt32(categoryId)).Select(g => new { groupId = g.groupId, groupName = g.groupName }).Distinct();
}
lstGroups.DataValueField = "groupId";
lstGroups.DataTextField = "groupName";
lstGroups.DataSource = groups;
lstGroups.DataBind();
解决方案
您在and块中group
创建了变量。您无法在这些块之外访问该变量。这就是您收到此错误的原因。if
else
解决方案是在块groups
之前声明变量。if
在里面if
,else
您正在创建一个动态创建的对象列表,这些对象具有groupId
和groupName
属性。您不能创建此类未知类型的列表。
解决方案 1
因此,您可以使用 type 来代替动态类型的对象Tuple<,>
。
以下代码将创建一个类型列表Tuple<int, string>
。并使用Select
.
var groups = new List<Tuple<int, string>>();
if (categoryId == null)
{
groups = usersData
.Where(g => g.groupName != null)
.Select(g => new Tuple<int, string>(g.groupId, g.groupName))
.Distinct();
}
else
{
groups = usersData
.Where(g => g.categoryId == Convert.ToInt32(categoryId))
.Select(g => new Tuple<int, string>(g.groupId, g.groupName))
.Distinct();
}
元组具有属性Item1
和,Item2
您可以按以下方式使用它们。DataValueField
DataTextField
lstGroups.DataValueField = "Item1";
lstGroups.DataTextField = "Item2";
lstGroups.DataSource = groups.ToList();
lstGroups.DataBind();
解决方案 2
您还可以使用命名值元组,这使您可以更好地控制如何访问元组值。
var groups = new List<(int groupId, string groupName)>();
上面的列表是元组值。您可以使用名称groupId
和访问单个元组的值groupName
。
if (categoryId == null)
{
groups = usersData
.Where(g => g.groupName != null)
.Select(g => (g.groupId, g.groupName))
.Distinct();
}
else
{
groups = usersData
.Where(g => g.categoryId == Convert.ToInt32(categoryId))
.Select(g => (g.groupId, g.groupName))
.Distinct();
}
现在您可以使用groupId
和groupName
元组值的名称分配给DataValueField
和DataTextField
。
lstGroups.DataValueField = "groupId";
lstGroups.DataTextField = "groupName";
lstGroups.DataSource = groups.ToList();
lstGroups.DataBind();
推荐阅读
- r - 在 R 中,如何计算特定列的出现次数?
- audio - 如何使用 FFmpeg (C/C++) 将原始 pcm_f32le 音频编码为 AAC 编码音频?
- arrays - 获取覆盖循环数组中所有有效条目的最小子数组
- graphql - 如何使用变量进行 Hasura 查询?
- python - 添加约束后 Scipy 差分进化失败
- python-3.x - 获取输入并将每个字符乘以列表中包含的内容
- mysql - 如何在表上仅显示特定数量的数据
- javascript - 将多个文件添加到 Zip 文件中不起作用
- java - 如何指示 yum 安装特定版本的 OpenJDK
- python - 在python中进行网络爬行时不响应