gpt4 book ai didi

使用数组或列表的 C# actionresult 过滤器

转载 作者:行者123 更新时间:2023-11-30 23:08:53 25 4
gpt4 key购买 nike

我觉得我要么很近,要么很远。绊倒了 MVC5 C# webapp,已经阅读了一些很好的帮助,但是我似乎无法找到让我得到结果的确切语法。

在我的 Controller 中,我试图根据字符串的串联来过滤我的结果(所以基本上我可以将它转换为数组或列表 - 或者保持原样。不确定)。数组/列表可以是 1 到 14 个变量。以下 Controller :

public ActionResult Result(string Person)
{
Hierarchy h = db.Hierarchies.First(i => i.People == Person);
if (h == null)
{
return HttpNotFound();
}
List<string> list = h.Hierarchy1.Split('/').ToList();

//Trial 1
var dat = from p in list where db.Hierarchies.Contains(p.list) select p; //

//Trial 2
var dat = db.Hierarchies.Where(s => s.People.Contains(list));//

return View("Result", dat);
}

基本上,Person 首先在表层次结构中查找,从中我得到一个由“/”分隔的父亲列表 (hierarchy1)。从这个列表中,我试图过滤掉不在层次结构表列表中的每一行。该表每行包含更多信息(出生日期、年龄、眼睛颜色等)。所有名称都是唯一的,因此不会出现错误。

我像每个蓝眼睛的人一样,通过更简单的搜索取得了成功,但是当有多个搜索时,我似乎无法将其加起来。

我已经尝试将它作为一个数组,但我最近的阅读似乎说列表更适合存储我的 string.split。

Hierarchy1 字符串可以如下所示:

克里斯·约翰·威尔克斯/大卫·约翰·威尔克斯/克雷格·拉姆齐·威尔克斯/迈克尔·威尔克斯

层次表示例:

  • 标题 - 层次结构 1;人;出生日期;年龄;眼睛;头发;

  • 数据 - 上面的每个层次结构 1;Michael Wilks;1980 年 5 月 2 日;37;蓝色;棕色

本质上,我正在尝试获取一个列表,我可以根据上面的数据在下面的 View (foreach)上循环:

  • Chris John Wilks DOB;年龄;眼睛;头发; (曾祖父)
  • David John Wilks DOB;年龄;眼睛;头发; (祖父)
  • Craig Ramsey Wilks DOB;年龄;眼睛;头发; (父亲)
  • Michael Wilks DOB;年龄;眼睛;头发; (儿子)

等等

在此处的列表中出现 Trial 1 错误 ---> 包含(p.list)

此处列表中出现 Trial 2 错误 ---> 包含(list)

所以我可能无法确定什么是正确的格式,但我一直在互联网上搜索,所以,这是我能拼凑出的最好的一些。

感谢每一个人和任何人的帮助和帮助。

更新 2017 年 9 月 18 日我已经放弃了我的第一次尝试,我认为我找到了一个更好的关键字来搜索=“LINQ”,这让我得到了一些更好的结果,我认为这让我正确地找到了答案。

        List<string> list = new List<string>();
list = h.Hierarchy1.Split('/').ToList();

foreach (string k in list)
{
IQueryable<Hierarchy> TQuery = from a in db.Hierarchies
where (a.People == k)
select a;
}
return View("Result", TQuery.ToList());

所以现在看起来我的查询有效,但我的“返回 View ”在“TQuery”.ToList 上显示错误。我的假设是因为我在 foreach 循环内而不是在外部调用它,所以我需要弄清楚如何在不抛出错误的情况下将其取出。然后发布我将运行以查看它是否真的有效。

我仍然认为有一种方法可以在没有 foreach 循环的情况下做到这一点,但它逃脱了我

更新 19/09/2017 - 工作结果因此,我设法让它作为一个 IQueryable 而没有 foreach 来工作——我认为这意味着它是一个相当优化的解决方案——此时列表中的人是无序的,但我认为这是次要的。

所以完整的是:

    public ActionResult Result(string Person)
{
Hierarchy h = db.Hierarchies.First(i => i.People == Person);
if (h == null)
{
return HttpNotFound();
}
int lvl = h.Level;
var list = new string[lvl];
list = h.Hierarchy1.Split('/');

IQueryable<Hierarchy> TQuery = from a in db.Hierarchies
where list.Contains(a.People)
select a;
return View("Result", TQuery.ToList());
}

最佳答案

    public ActionResult Result(string Person)
{
Hierarchy h = db.Hierarchies.First(i => i.People == Person);
if (h == null)
{
return HttpNotFound();
}
int lvl = h.Level;
var list = new string[lvl];
list = h.Hierarchy1.Split('/');

IQueryable<Hierarchy> TQuery = from a in db.Hierarchies
where list.Contains(a.People)
select a;
return View("Result", TQuery.ToList());
}

我可能应该补充 - 幸运的是,我确实将每个 Hierarchy1 的人数存储为表中的“Level”,这样我得到了一个数组大小“lvl”。

我仍然认为@AryanFirouzyan 指出了一个更好的解决方案,但由于我已经在这上面花了 10 个小时,我认为我需要继续处理下一个问题:)

关于使用数组或列表的 C# actionresult 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46263060/

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