C# 4.0 在MVC5中引用SQL内部联接查询别名的最佳方法
我有下面的代码,想知道是否有任何方法可以在MVC5Razor中引用“ManagedByName”,或者如果您知道解决方法,将不胜感激 我试图实现的是派生一个结合在对象中的名字和姓氏,或者最好是可以在Razor中访问的“别名”。请帮我完成这项任务。我已经为此工作了将近两天,我感到困惑 在控制器类中,我有以下内容:C# 4.0 在MVC5中引用SQL内部联接查询别名的最佳方法,c#-4.0,razor,asp.net-mvc-5,C# 4.0,Razor,Asp.net Mvc 5,我有下面的代码,想知道是否有任何方法可以在MVC5Razor中引用“ManagedByName”,或者如果您知道解决方法,将不胜感激 我试图实现的是派生一个结合在对象中的名字和姓氏,或者最好是可以在Razor中访问的“别名”。请帮我完成这项任务。我已经为此工作了将近两天,我感到困惑 在控制器类中,我有以下内容: public async Task<ActionResult> Details(string location) { if (l
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
});
}
@foreach (var item in Model)
{
@Html.DisplayFor(modelItem => item...
}
我可以从Ienumerable模型中获取对象,但无法在foreach循环中获取ManagedByNameIQeryable名称,因为无法识别该对象。同样,任何代码示例方面的帮助都将不胜感激。我对MVC有些陌生,但希望有一种解决方案能让我感到困惑。您可以通过在匹配的分部类中添加新属性来横向扩展EF类。我强烈建议您开始使用EF,停止使用硬连线SQL字符串:) 只需将
ManagedByName
添加为一个属性,返回连接的其他两个名称,并将其与视图中的任何其他属性一样使用
public partial class YourEFModelClassNameHere
{
public string ManagedByName
{
get
{
return this.ManagerFirstName + " " + this.ManagerLastName;
}
}
}
谢谢你的额外见解。我会看看我是否能用这些信息解决问题。事实上,现在我看到了它,我遇到的问题是如何在页面顶部引用另一个@model实体的同一页面中调用这个EF对象的值?例如,我有:@Html.DisplayFor(modelItem=>item.SomeID在页面中,页面顶部有@model IEnumerable,但是如何“侧向”调用额外的EF对象正如您所说,它在foreach循环中呈现?部分类实际上是同一个类。只需确保新类与原始类具有完全相同的命名空间。然后新属性就存在于
Ctr
(我假设这是您的类名)。好的,这听起来可能是个愚蠢的问题,但我是否要添加您作为控制器的一部分或作为ViewModel提供的代码?我不确定将其放置在何处以便正确执行。还是应该直接编辑EF类?