如何从 KeyValuePair 值中获取值
How can I get value from KeyValuePair Values
我必须用 class 时间、星期几和 classes 建立一个健身房时间表,所以我从数据库中得到的是:
时间 - 星期几 - class
08:00 - 1 - Natação
08:00 - 3 - Natação
08:30 - 1 - 柔术
09:00 - 1 - Natação
10:30 - 1 - 柔术
14:00 - 3 - Natação
我的模特:
public class Group<K, T>
{
public K Key;
public IEnumerable<T> Values;
}
public class Aulas
{
public int id { get; set; }
public int idDias { get; set; }
public DateTime AulaHora { get; set; }
public string AulaNome { get; set; }
}
我的控制器
public ActionResult Index()
{
Context _q = new Context();
var query = from x in _q.Aulas
group x by x.AulaHora into g
select new Group<DateTime, Aulas> { Key = g.Key, Values = g };
return View(query.ToList());
}
我的看法:
@using Grid.Models;
@model List<Group<DateTime, Aulas>>
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<table class="table table-striped">
<thead><tr><th>Horários</th><th>Segunda</th><th>Terça</th><th>Quarta</th><th>Quinta</th><th>Sexta</th><th>Sábado</th></tr></thead>
@foreach (var item in Model)
{
<tr>
@foreach (var i in item.Values)
{
<td>@i.AulaHora.ToString("HH:mm")</td>
<td>@((i.idDias == 1) ? i.AulaNome.ToString() : "")</td>
<td>@((i.idDias == 2) ? i.AulaNome.ToString() : "")</td>
<td>@((i.idDias == 3) ? i.AulaNome.ToString() : "")</td>
<td>@((i.idDias == 4) ? i.AulaNome.ToString() : "")</td>
<td>@((i.idDias == 5) ? i.AulaNome.ToString() : "")</td>
<td>@((i.idDias == 6) ? i.AulaNome.ToString() : "")</td>
}
</tr>
}
</table>
很遗憾,我没有使用 KeyValuePair 的经验。如果有人能建议我需要做什么,我将不胜感激。
提前致谢。
每个 KeyValuePair 将包含一个 .Value 属性,它将为您提供值。请参阅此 MSDN https://msdn.microsoft.com/en-us/library/ms224761(v=vs.110).aspx
更好地理解问题后编辑:
您的问题有两个方面。
- 首先,您针对所需输出的类型构建了错误的查询。
- 其次,您在视图中循环查询是错误的,无法按您的意愿显示。
如果我是你,我会摆脱那个 Group
class,因为它不再需要了。 Dictionary
更适合您的需要。我会将您的模型设置为 Dictionary<DateTime, List<Aulas>>
.
Dictionary<DateTime, List<Aulas>> query =
new Dictionary<DateTime, List<Aulas>>();
_c.Aulas.ForEach(
(a) =>
{
if (query.ContainsKey(a.AulaHora))
{
query[a.AulaHora].Add(a);
}
else
{
query.Add(a.AulaHora, new List<Aulas>() { a });
}
});
return View(query);
然后您将需要以不同的方式遍历它们以获得您想要的结果。
@using Grid.Models;
@model Dictionary<DateTime, List<Aulas>>
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<table class="table table-striped">
<thead><tr><th>Horários</th><th>Segunda</th><th>Terça</th><th>Quarta</th><th>Quinta</th><th>Sexta</th><th>Sábado</th></tr></thead>
@foreach (var item in Model)
{
<tr>
<td>@(item.Key.ToString("HH:mm"))</td>
<td>@(string.Join(", ", item.Value.Where((wa) => wa.idDias == 1).Select((sa) => sa.AulaNome)))</td>
<td>@(string.Join(", ", item.Value.Where((wa) => wa.idDias == 2).Select((sa) => sa.AulaNome)))</td>
<td>@(string.Join(", ", item.Value.Where((wa) => wa.idDias == 3).Select((sa) => sa.AulaNome)))</td>
<td>@(string.Join(", ", item.Value.Where((wa) => wa.idDias == 4).Select((sa) => sa.AulaNome)))</td>
<td>@(string.Join(", ", item.Value.Where((wa) => wa.idDias == 5).Select((sa) => sa.AulaNome)))</td>
<td>@(string.Join(", ", item.Value.Where((wa) => wa.idDias == 6).Select((sa) => sa.AulaNome)))</td>
</tr>
}
</table>
只是几件事。我正在根据 Aulas 的 DateTime 创建字典。如果有匹配的 DateTime 键,那么我将 Aulas 添加到字典中的现有条目中。这样,当我在视图中循环遍历它们时,我将按 DateTime 循环。然后对于每一列 (<td>
),我在 .Value 上执行一个 Where 子句,这将是一个 List<Aulas>
和一个 Select 查询以获取我想要的数据类型。它将拉出所有具有该特定 idDias 的 Aulas 并使用 String.Join() 方法加入它们。
我必须用 class 时间、星期几和 classes 建立一个健身房时间表,所以我从数据库中得到的是:
时间 - 星期几 - class
08:00 - 1 - Natação
08:00 - 3 - Natação
08:30 - 1 - 柔术
09:00 - 1 - Natação
10:30 - 1 - 柔术
14:00 - 3 - Natação
我的模特:
public class Group<K, T>
{
public K Key;
public IEnumerable<T> Values;
}
public class Aulas
{
public int id { get; set; }
public int idDias { get; set; }
public DateTime AulaHora { get; set; }
public string AulaNome { get; set; }
}
我的控制器
public ActionResult Index()
{
Context _q = new Context();
var query = from x in _q.Aulas
group x by x.AulaHora into g
select new Group<DateTime, Aulas> { Key = g.Key, Values = g };
return View(query.ToList());
}
我的看法:
@using Grid.Models;
@model List<Group<DateTime, Aulas>>
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<table class="table table-striped">
<thead><tr><th>Horários</th><th>Segunda</th><th>Terça</th><th>Quarta</th><th>Quinta</th><th>Sexta</th><th>Sábado</th></tr></thead>
@foreach (var item in Model)
{
<tr>
@foreach (var i in item.Values)
{
<td>@i.AulaHora.ToString("HH:mm")</td>
<td>@((i.idDias == 1) ? i.AulaNome.ToString() : "")</td>
<td>@((i.idDias == 2) ? i.AulaNome.ToString() : "")</td>
<td>@((i.idDias == 3) ? i.AulaNome.ToString() : "")</td>
<td>@((i.idDias == 4) ? i.AulaNome.ToString() : "")</td>
<td>@((i.idDias == 5) ? i.AulaNome.ToString() : "")</td>
<td>@((i.idDias == 6) ? i.AulaNome.ToString() : "")</td>
}
</tr>
}
</table>
很遗憾,我没有使用 KeyValuePair 的经验。如果有人能建议我需要做什么,我将不胜感激。
提前致谢。
每个 KeyValuePair 将包含一个 .Value 属性,它将为您提供值。请参阅此 MSDN https://msdn.microsoft.com/en-us/library/ms224761(v=vs.110).aspx
更好地理解问题后编辑:
您的问题有两个方面。
- 首先,您针对所需输出的类型构建了错误的查询。
- 其次,您在视图中循环查询是错误的,无法按您的意愿显示。
如果我是你,我会摆脱那个 Group
class,因为它不再需要了。 Dictionary
更适合您的需要。我会将您的模型设置为 Dictionary<DateTime, List<Aulas>>
.
Dictionary<DateTime, List<Aulas>> query =
new Dictionary<DateTime, List<Aulas>>();
_c.Aulas.ForEach(
(a) =>
{
if (query.ContainsKey(a.AulaHora))
{
query[a.AulaHora].Add(a);
}
else
{
query.Add(a.AulaHora, new List<Aulas>() { a });
}
});
return View(query);
然后您将需要以不同的方式遍历它们以获得您想要的结果。
@using Grid.Models;
@model Dictionary<DateTime, List<Aulas>>
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<table class="table table-striped">
<thead><tr><th>Horários</th><th>Segunda</th><th>Terça</th><th>Quarta</th><th>Quinta</th><th>Sexta</th><th>Sábado</th></tr></thead>
@foreach (var item in Model)
{
<tr>
<td>@(item.Key.ToString("HH:mm"))</td>
<td>@(string.Join(", ", item.Value.Where((wa) => wa.idDias == 1).Select((sa) => sa.AulaNome)))</td>
<td>@(string.Join(", ", item.Value.Where((wa) => wa.idDias == 2).Select((sa) => sa.AulaNome)))</td>
<td>@(string.Join(", ", item.Value.Where((wa) => wa.idDias == 3).Select((sa) => sa.AulaNome)))</td>
<td>@(string.Join(", ", item.Value.Where((wa) => wa.idDias == 4).Select((sa) => sa.AulaNome)))</td>
<td>@(string.Join(", ", item.Value.Where((wa) => wa.idDias == 5).Select((sa) => sa.AulaNome)))</td>
<td>@(string.Join(", ", item.Value.Where((wa) => wa.idDias == 6).Select((sa) => sa.AulaNome)))</td>
</tr>
}
</table>
只是几件事。我正在根据 Aulas 的 DateTime 创建字典。如果有匹配的 DateTime 键,那么我将 Aulas 添加到字典中的现有条目中。这样,当我在视图中循环遍历它们时,我将按 DateTime 循环。然后对于每一列 (<td>
),我在 .Value 上执行一个 Where 子句,这将是一个 List<Aulas>
和一个 Select 查询以获取我想要的数据类型。它将拉出所有具有该特定 idDias 的 Aulas 并使用 String.Join() 方法加入它们。