Mysql 使用LINQ/lambda.NETMVC从表中选择一些列和所有数据?

Mysql 使用LINQ/lambda.NETMVC从表中选择一些列和所有数据?,mysql,asp.net-mvc,linq,lambda,Mysql,Asp.net Mvc,Linq,Lambda,我只想使用LINQ或lambda表达式从表中选择一些特定的列,然后使用Tempdata将表发送到客户机。但这对我不起作用 我的控制器=>使用LINQ TempData["Courses"] = (from a in db.Courses select new { a.name, a.vendor_heading }).ToList(); 并使用lambda表达式=> TempData["Courses"] = db.Courses.Select(x => new { x.name, x.

我只想使用LINQ或lambda表达式从表中选择一些特定的列,然后使用Tempdata将表发送到客户机。但这对我不起作用

我的控制器=>使用LINQ

TempData["Courses"] = (from a in db.Courses select new { a.name, a.vendor_heading }).ToList();
并使用lambda表达式=>

TempData["Courses"] = db.Courses.Select(x => new { x.name, x.vendor_heading }).ToList();
这对我来说似乎很完美,但我不知道为什么它不起作用。但是如果我使用=>

TempData["Courses"] = db.Courses.ToList();
这对我来说绝对有效。在上面,我尝试从表中选择* 当我尝试发送满表时,它没有任何问题。但是,如果我想发送一个特定的专栏,我有一个问题。我需要发送特定列=>因为我只需要这些列

在我看来,=>

<div>
     @Html.LabelFor(model => model.Course.vendor_heading, "Vendor Name", new { @class = "control-label" })
     @{
       var VendorName = CoursesTable.Where(x => x.name == Model.name).Select(x => x.vendor_heading).First();
      }
     @Html.TextBox("vendor_heading", VendorName, new { @style = "border-radius:3px;", @class = "form-control", @placeholder = Html.DisplayNameFor(m => m.Course.vendor_heading), @autocomplete = "off", @readonly = "readonly" })
</div>

@{
IEnumerable<Course> CoursesTable = TempData["Courses"] as   IEnumerable<Course>;
 }
我在上面提到,如果我发送特定的列,它会给我类似=> 我的模型=>

public class Course
{
    [MaxLength(700, ErrorMessage = "The Max Length For Heading Is 700 Character!")]
    [Required(ErrorMessage="Vendor Name Is Required!")]
    [Display(Name = "Vendor Heading")]
    public string vendor_heading { get; set; }
    /// <summary>
    /// //////////
    /// </summary>
    [Key]
    [Required(AllowEmptyStrings = false, ErrorMessage = "Course Name Is Required!")]
    [MaxLength(700, ErrorMessage = "The Max Length For Course Name Is 700 Character!")]
    [Display(Name = "Course Name")]
    public string name { get; set; }
    /// <summary>
    /// //////////
    /// </summary>
    [Required(AllowEmptyStrings = false, ErrorMessage = "Course Code Is Required!")]
    [MaxLength(200, ErrorMessage = "The Max Length For Course Code Is 200 Character!")]
    [Display(Name = "Course Code")]
    public string code { get; set; }
    /// <summary>
    /// //////////
    /// </summary>
    [Required(AllowEmptyStrings = false, ErrorMessage = "Picture Is Required!")]
    [MaxLength(1000, ErrorMessage = "The Max Length For Pic Path Is 1000 Character!")]
    [Display(Name = "Pic")]
    public string pic_path { get; set; }
    /// <summary>
    /// /////////
    /// </summary>
    [Required(ErrorMessage = "Adding date Is Required!")]
    [DataType(DataType.Date, ErrorMessage = "Invalid Date!")]
    [Display(Name = "Adding Date")]
    public DateTime adding_date { get; set; }
    /// <summary>
    /// /////////
    /// </summary>
    [MaxLength(5000, ErrorMessage = "The Max Length For Course Details Is 5000 Character!")]
    [Display(Name = "Course Details")]
    public string details { get; set; }

    //relationship With  other tables-------
    [ForeignKey("vendor_heading")]
    public Vendor Vendor { get; set; }
    public List<Batche> Batches { get; set; }
}

我不知道我是否能向你们解释我的问题。如果没有,请告诉我,如果有,请帮助我……

在控制器中获取要显示的供应商名称:

ViewBag["VendorName"] = db.Courses.Where(x => x.name == Model.name).Select(x => x.vendor_heading).First();
那么在你看来使用

@Html.TextBox("vendor_heading", ViewBag["VendorName"], new { @style = "border-radius:3px;", @class = "form-control", @placeholder = Html.DisplayNameFor(m => m.Course.vendor_heading), @autocomplete = "off", @readonly = "readonly" })

正如您所说,它也应该与tempdata一起工作

尝试以下更改:

也就是说,在代码本身中,将转换代码放在错误发生的行之前,因为这是代码执行的顺序

 @{
      if(TempData["Courses"] != null)
{
    IEnumerable<Course> CoursesTable = TempData["Courses"] as   IEnumerable<Course>;
}
     }




    <div>
         @Html.LabelFor(model => model.Course.vendor_heading, "Vendor Name", new { @class = "control-label" })
         @{
           var VendorName = CoursesTable.Where(x => x.name == Model.name).Select(x => x.vendor_heading).First();
          }
         @Html.TextBox("vendor_heading", VendorName, new { @style = "border-radius:3px;", @class = "form-control", @placeholder = Html.DisplayNameFor(m => m.Course.vendor_heading), @autocomplete = "off", @readonly = "readonly" })
    </div>
希望这也能像你想的那样对你有用

请让我知道你的反馈

谢谢
karthik

CoursesTable从何而来?@Simon我编辑了我的详细信息。请再看一看……如果要在视图中使用它,您需要将其添加到ViewBag或ViewData@Simon是的,我添加了一个临时数据。如果我没有错,这也是一种方法吗?