Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.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# 如何正确地从数据库中获取数据、对其进行操作并为视图提供服务?_C#_Asp.net_Sql Server_Asp.net Mvc_Entity Framework - Fatal编程技术网

C# 如何正确地从数据库中获取数据、对其进行操作并为视图提供服务?

C# 如何正确地从数据库中获取数据、对其进行操作并为视图提供服务?,c#,asp.net,sql-server,asp.net-mvc,entity-framework,C#,Asp.net,Sql Server,Asp.net Mvc,Entity Framework,我不熟悉C#数据库的东西,我有一个MVC项目,我尝试在用户进行搜索后从数据库中获取、操作和服务数据到视图。我可以从数据库中得到结果,但却无能为力。IQueryable正在返回一个包含db中所有行值的“结果视图”列表,问题是我不知道如何访问该数据,因为“结果视图”是在运行时创建的,并且我无法使用SearchResult.ResultsView[0]。城市或运行前的其他内容,因为它的内容将为空 请告诉我如何正确地从数据库获取和操作数据,IQueryable在运行时返回一个列表,但下一步呢???如果你

我不熟悉C#数据库的东西,我有一个MVC项目,我尝试在用户进行搜索后从数据库中获取、操作和服务数据到视图。我可以从数据库中得到结果,但却无能为力。IQueryable正在返回一个包含db中所有行值的“结果视图”列表,问题是我不知道如何访问该数据,因为“结果视图”是在运行时创建的,并且我无法使用SearchResult.ResultsView[0]。城市或运行前的其他内容,因为它的内容将为空

请告诉我如何正确地从数据库获取和操作数据,IQueryable在运行时返回一个列表,但下一步呢???如果你能解释一点或给一些文档阅读,我将非常感谢。谢谢

我有一门课:

namespace Test.Models
{
[Table("LInfo")]
public class LInfo
    {
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int LId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string StreetAddress { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string Zip { get; set; }
    public int DistrictNo { get; set; }

    public virtual Image Image { get; set; }
    public virtual ApplicationUser ProcessedBy { get; set; }
    public int Pass { get; set; } //pass 0,1,2,3
    }
}
映射到哪个图像id:

namespace Test.Models
{
[Table("Img")]
public class Img
    {
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ImgId { get; set; }
    public byte[] FileContents { get; set; }
    public string FileName { get; set; }
    public int FileSize { get; set; }
    public bool Anonymous { get; set; }
    public bool Unreadable { get; set; }
    public bool MultipleFiles { get; set; }
    public DateTime? Pulled { get; set; }
    public virtual ApplicationUser UploadedBy { get; set; }
    public virtual ICollection<LetterInfo> Letters { get; set; }
    }
}
Visual Studio中的示例:


IQueryable表示查询,而不是集合。它有.AsEnumerable()和.ToList()等方法,它们将执行查询并返回集合。

试试这个

public ActionResult Index(SearchModel model)
    {
        using (ApplicationDbContext db = new ApplicationDbContext())
        {
            int districtNo = Convert.ToInt32(model.DistrictNo);
            var SearchResult = db.LetterInfos.Where(l => l.DistrictNo == districtNo && l.State == model.State)
                         .ToList();


            return View(SearchResult);
        }
    }

不要忘记修改视图,使其接受IEnumerable作为模型并正确显示它

您需要一个foreach来访问数据列表

foreach(var i in SearchResult)
{
    //"i" will have access to your data
}

我不能确定你的最终目标,但目前你似乎有: 带有搜索功能的登录页;此表单应发布到服务器并检索匹配数据作为searchresult模型

您的代码很接近,但我可以建议您进行一些更改以开始。原来

public ActionResult Index(SearchModel model)
{
    ApplicationDbContext db = new ApplicationDbContext();
    int districtNo = Convert.ToInt32(model.DistrictNo);
    IQueryable SearchResult = db.LetterInfos.Where(l => l.DistrictNo == 
        districtNo && l.State == model.State)
        .Select(s => s);

    return View();
}
这很接近,并且很好地使用了Linq,但是正如前面的答案所建议的,IQueryable接口实际上并不可用 执行查询。为此,我将添加.ToList()并更改初始数据类型——您可以将其简化为:

var SearchResult = db.LetterInfos.Where(l => l.DistrictNo == 
        districtNo && l.State == model.State)
        .Select(s => s).ToList();
最后,尽管您从数据库中获得了一个搜索结果列表,但您并没有将其作为模型传递给视图。您可以选择返回与此新模型相同的视图,例如使用Razor将其绑定到隐藏的结果表,或者选择返回新视图(可以看到view()列出的多个重载)

同样,通过将新填充的对象作为模型添加到视图中,可以使用此Index post方法传回新视图和模型列表,也可以通过某种方式重用原始视图:

return View("someView", SearchResult); 
   <or> 
return View(SearchResult);
返回视图(“someView”,SearchResult);
返回视图(搜索结果);
同样,您还应该在其他cshtml视图(如果没有)中指定模型,如下所示:

@model Namespace.SearchResults
或
@模型列表
等
注意:这假设您希望用搜索结果填充同一视图,并且您的解决方案中有一个与SearchResult对应的公共类


希望这足以让您开始,祝您好运。

不要忘记处理打开的上下文,并通过调用.ToList()执行查询,而不是直接枚举IQueryable。嘿,问题是SearchResult在运行前为null,因此,我尝试在视图中使用的属性将是一个简单的语法错误,因此项目将无法生成。我需要在视图中使用定义了属性的类,并在运行时将值从SearchResult复制到这些属性中。。不确定方法:)你能发表你的观点吗?看起来你做错了什么
return View("someView", SearchResult); 
   <or> 
return View(SearchResult);
@model Namespace.SearchResults
     or 
@model List<Namespace.SearchResult>
     etc