C# 如何从linq返回数组?
您好,我正在编写linq查询以从多个表中获取数据。我试图得到如下所示的对象数组C# 如何从linq返回数组?,c#,arrays,linq,asp.net-mvc-4,C#,Arrays,Linq,Asp.net Mvc 4,您好,我正在编写linq查询以从多个表中获取数据。我试图得到如下所示的对象数组 processobject retObj = new processobject(); retObj =(from c in entityObject.NCT_Process join user in entityObject.NCT_UserRegistration on c.createdUserId equals user.User_Id join file in entityObje
processobject retObj = new processobject();
retObj =(from c in entityObject.NCT_Process
join user in entityObject.NCT_UserRegistration on c.createdUserId equals user.User_Id
join file in entityObject.NCT_FileUpload on c.iconfileId equals file.upld_ID
join templObj in entityObject.NCT_Templates on c.ID equals templObj.processId
where c.processid == "10"
select new processobject
{
id = c.ID,
code = c.code,
flochartContent = c.flowchartContent,
//arrayofTemplates array i want to return
}
);
public class processobject
{
public templatesObject[] arrayofTemplates { get; set; }
public int id { get; set; }
public string flochartContent { get; set; }
public string code { get; set; }
}
在上面的查询中,我编写了一个条件,其中c.processid==“10”
。因此,NCT_模板
中存在多条记录,且processid
10。我想返回包含所有记录的数组。我在自定义类中创建了如下数组。
我有这个疑问
processobject retObj = new processobject();
retObj = (from c in entityObject.NCT_Process
join user in entityObject.NCT_UserRegistration on c.createdUserId equals user.User_Id
join file in entityObject.NCT_FileUpload on c.iconfileId equals file.upld_ID
into filesObjFirst
from wt1 in filesObjFirst.DefaultIfEmpty()
join templObj in entityObject.NCT_Templates on c.ID equals templObj.processId
into filesObj
from wt in filesObj.DefaultIfEmpty()
where c.ID == dbObject.ID
select new processobject
{
id = c.ID,
code = c.code,
flochartContent = c.flowchartContent,
name = c.name,
parentId = c.parentId,
projectId = c.projectId,
objectives = c.objectives,
displayOrder = c.dispalyOrder,
iconFileId = c.iconfileId,
level = c.level,
iconFileobj = new iconFile
{
id = wt1.upld_ID,
name = wt1.fileName,
url = wt1.filePath
},
description = c.description,
startCriteria = c.startCriteria,
endCriteria = c.endCriteria,
reporting = c.reporting,
output = c.output,
kpi = c.kpi,
procedureHistory = c.procedureHistory,
role = c.role,
duration = c.duration,
owner = c.owner,
visibility = true,
createdUserId = c.createdUserId,
}).FirstOrDefault();
我还有一个问题
templatesObject[] templatesobject = (from c in entityObject.NCT_Templates
where c.processId == dbObject.ID
join file in entityObject.NCT_FileUpload on c.templateFileId equals file.upld_ID
into filesObjFirst
from wt1 in filesObjFirst.DefaultIfEmpty()
select new templatesObject
{
id = c.id,
title = c.title,
version = c.version,
visible = c.visibility,
filesObj = new iconFileTemplate()
{
id = wt1.upld_ID,
url = wt1.filePath,
name = wt1.fileName
}
}).ToArray();
在arrayofTemplates
内部,我想存储NCT_模板的记录
。
任何帮助都将不胜感激。谢谢。A。ToArray()
将在您查询后完成此工作
processobject retObj = new processobject();
retObj =(from c in entityObject.NCT_Process
join user in entityObject.NCT_UserRegistration on c.createdUserId equals user.User_Id
join file in entityObject.NCT_FileUpload on c.iconfileId equals file.upld_ID
join templObj in entityObject.NCT_Templates on c.ID equals templObj.processId
where c.processid == "10"
select new processobject
{
id = c.ID,
code = c.code,
flochartContent = c.flowchartContent,
//arrayofTemplates array i want to return
}
);
var arr = retObj.ToArray();
更新
我建议您使用ICollection
而不是数组。由于需要阵列,解决方案如上所述,但如果使用ICollection
,则更容易理解:
public class processobject
{
public ICollection<processobject> processobject{ get; set; }
public int id { get; set; }
public string flochartContent { get; set; }
public string code { get; set; }
}
更新
由于json对象中的数组返回属性,我建议您创建另一个模型。并将值直接传递给此类的对象。如下图所示:
public class processobject
{
public templateFileId templateFileId{ get; set; }
public int id { get; set; }
public string flochartContent { get; set; }
public string code { get; set; }
}
public class templateFileId
{
public int id {get; set;}
public string url {get; set;}
public string name {get; set;}
public int created {get; set;}
}
一个.ToArray()
将在您查询后执行此任务
processobject retObj = new processobject();
retObj =(from c in entityObject.NCT_Process
join user in entityObject.NCT_UserRegistration on c.createdUserId equals user.User_Id
join file in entityObject.NCT_FileUpload on c.iconfileId equals file.upld_ID
join templObj in entityObject.NCT_Templates on c.ID equals templObj.processId
where c.processid == "10"
select new processobject
{
id = c.ID,
code = c.code,
flochartContent = c.flowchartContent,
//arrayofTemplates array i want to return
}
);
var arr = retObj.ToArray();
更新
我建议您使用ICollection
而不是数组。由于需要阵列,解决方案如上所述,但如果使用ICollection
,则更容易理解:
public class processobject
{
public ICollection<processobject> processobject{ get; set; }
public int id { get; set; }
public string flochartContent { get; set; }
public string code { get; set; }
}
更新
由于json对象中的数组返回属性,我建议您创建另一个模型。并将值直接传递给此类的对象。如下图所示:
public class processobject
{
public templateFileId templateFileId{ get; set; }
public int id { get; set; }
public string flochartContent { get; set; }
public string code { get; set; }
}
public class templateFileId
{
public int id {get; set;}
public string url {get; set;}
public string name {get; set;}
public int created {get; set;}
}
非常感谢。我编辑了我的问题。我不知道如何为属性赋值。我已经在上面发布了示例对象。@NiranjangDBole updated:),请记住,如果数组返回多组数据,您需要如上所述使用ICollection。谢谢您的时间。在我的示例中,templateFileId将有多行。如何为templateFileId的属性赋值。例如,我写了id=c.id,title=c.title,version=c.version,这样我怎么能给url,name赋值呢etc@NiranjanGodbole在您的查询中。您可以根据TemplatefileId进行选择,将数据分配给新类,如:
newTemplateFileId{id=c.id,url=c.url,name=c.name,created=c.created}
我已经选择了新的processobject如何添加新的TemplatefileId谢谢。我编辑了我的问题。我不知道如何为属性赋值。我已经在上面发布了示例对象。@NiranjangDBole updated:),请记住,如果数组返回多组数据,您需要如上所述使用ICollection。谢谢您的时间。在我的示例中,templateFileId将有多行。如何为templateFileId的属性赋值。例如,我写了id=c.id,title=c.title,version=c.version,这样我怎么能给url,name赋值呢etc@NiranjanGodbole在您的查询中。您可以基于TemplatefileId进行选择,将数据分配给新类,如:newTemplateFileId{id=c.id,url=c.url,name=c.name,created=c.created}
我已经选择了新的processobject如何添加新的TemplatefileId