在 MVC 5 Razor 中引用 SQL 内部连接查询别名的最佳方式
Best Way to reference a SQL Inner Join Query alias in MVC 5 Razor
我有以下代码,想知道是否有任何方法可以在 MVC 5 Razor 中引用 "ManagedByName",或者如果您知道解决方法,我们将不胜感激。
我想要完成的是派生一个对象中的名字和姓氏组合,或者最好是 "alias",可以在 Razor 中访问。我需要帮助来完成这项任务。我已经做了将近两天的工作,我很困惑....
在控制器 Class 中,我有以下内容:
public async Task<ActionResult> Details(string location)
{
if (location == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
// Contractor contractor = db.Contractors.Find(id);
string Query = "SELECT cmb.*, dc.DeliveryCenter,c.ContractorNumber,c.SubContractor,c.FirstName,c.LastName,c.dbaBusinessName,at.AccountTitleDescription,c.Email,c.MasterContractorNumber,c.MasterContractorNumber,c.OriginalContractDate,c.IsContractSuspended" +
" from Contractor c inner join ContractorManagedBy cmb on c.ManagedBy = cmb.ManagedBy" +
" inner join DCLocMapping dc on c.LocationID = dc.LocationID" +
" inner join AccountTitle at on c.AccountTitleID = at.AccountTitleID" +
" where DeliveryCenter in (@p0) order by dc.DeliveryCenter,c.ContractorNumber" +
" Select new Contracting { ManagedBy1 = cmb.ManagerFirstName + ' ' + cmb.ManagerLastName}";
Contractor contractor = await db.Contractors.SqlQuery(Query, location).SingleOrDefaultAsync();
if (contractor == null)
{
return HttpNotFound();
}
return View(contractor);
}
public class Contracting
{
public int iimanagedby { get; set; }
public string ManagedByName { get; set; }
}
public IQueryable<Contracting> TakeManagedBy()
{
return (from x in db.ContractorManagedBies
orderby x.ManagerLastName
select new Contracting
{
iimanagedby = x.ManagedBy,
ManagedByName = x.ManagerFirstName + " " + x.ManagerLastName
});
}
在 Razor 页面中,我有:
@foreach (var item in Model)
{
@Html.DisplayFor(modelItem => item...
}
我可以从 Ienumerable 模型中获取对象,但看不到在 foreach 循环中获取 ManagedByName IQeryable 名称的方法,因为无法识别该对象。同样,我们将不胜感激对代码示例的任何帮助。我对 MVC 有点陌生,但希望有一种方法可以解决这个让我感到困惑的解决方案。
您可以通过在匹配的部分 class 中添加新属性来横向扩展 EF 类。我强烈建议您开始使用 EF 并停止使用硬连线 SQL 字符串:)
只需将 ManagedByName
添加为 属性,returns 其他两个名称加入并像视图中的任何其他 属性 一样使用它。
public partial class YourEFModelClassNameHere
{
public string ManagedByName
{
get
{
return this.ManagerFirstName + " " + this.ManagerLastName;
}
}
}
我有以下代码,想知道是否有任何方法可以在 MVC 5 Razor 中引用 "ManagedByName",或者如果您知道解决方法,我们将不胜感激。
我想要完成的是派生一个对象中的名字和姓氏组合,或者最好是 "alias",可以在 Razor 中访问。我需要帮助来完成这项任务。我已经做了将近两天的工作,我很困惑....
在控制器 Class 中,我有以下内容:
public async Task<ActionResult> Details(string location)
{
if (location == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
// Contractor contractor = db.Contractors.Find(id);
string Query = "SELECT cmb.*, dc.DeliveryCenter,c.ContractorNumber,c.SubContractor,c.FirstName,c.LastName,c.dbaBusinessName,at.AccountTitleDescription,c.Email,c.MasterContractorNumber,c.MasterContractorNumber,c.OriginalContractDate,c.IsContractSuspended" +
" from Contractor c inner join ContractorManagedBy cmb on c.ManagedBy = cmb.ManagedBy" +
" inner join DCLocMapping dc on c.LocationID = dc.LocationID" +
" inner join AccountTitle at on c.AccountTitleID = at.AccountTitleID" +
" where DeliveryCenter in (@p0) order by dc.DeliveryCenter,c.ContractorNumber" +
" Select new Contracting { ManagedBy1 = cmb.ManagerFirstName + ' ' + cmb.ManagerLastName}";
Contractor contractor = await db.Contractors.SqlQuery(Query, location).SingleOrDefaultAsync();
if (contractor == null)
{
return HttpNotFound();
}
return View(contractor);
}
public class Contracting
{
public int iimanagedby { get; set; }
public string ManagedByName { get; set; }
}
public IQueryable<Contracting> TakeManagedBy()
{
return (from x in db.ContractorManagedBies
orderby x.ManagerLastName
select new Contracting
{
iimanagedby = x.ManagedBy,
ManagedByName = x.ManagerFirstName + " " + x.ManagerLastName
});
}
在 Razor 页面中,我有:
@foreach (var item in Model)
{
@Html.DisplayFor(modelItem => item...
}
我可以从 Ienumerable 模型中获取对象,但看不到在 foreach 循环中获取 ManagedByName IQeryable 名称的方法,因为无法识别该对象。同样,我们将不胜感激对代码示例的任何帮助。我对 MVC 有点陌生,但希望有一种方法可以解决这个让我感到困惑的解决方案。
您可以通过在匹配的部分 class 中添加新属性来横向扩展 EF 类。我强烈建议您开始使用 EF 并停止使用硬连线 SQL 字符串:)
只需将 ManagedByName
添加为 属性,returns 其他两个名称加入并像视图中的任何其他 属性 一样使用它。
public partial class YourEFModelClassNameHere
{
public string ManagedByName
{
get
{
return this.ManagerFirstName + " " + this.ManagerLastName;
}
}
}