我在从两个来源获取数据并合并到一个DTO然后发送到视图
时遇到问题我的数据库中有一个用户列表,我的WCF服务中有一个作业列表。我想要做的是创建一个Add Job页面,我从数据库中获取所有Users当前作业,并在View中创建一个新的DropDown列表,显示用户没有的所有作业。因此,我将两个列表相交,并创建一个新列表,删除所有已获取的作业。
我试过这样做,但看不出我哪里出错了。
public ActionResult AddJob(String usrCode)
{
var jobs = jobClient.getAllJobs();
var allJobCodes = (from s in jobs select s.jobCode).ToList();
var thisJobCode = (from s in db.UserJobs
where s.usrCode == usrCode
select s.jobCode).ToList();
var notObtained = allJobCodes.Except(thisJobCode);
IEnumerable<String> list1 = allJobCodes.AsEnumerable();
IEnumerable<String> list2 = notObtained.AsEnumerable();
IEnumerable<String> list3 = list2.Select(x => new UserJobsDTO()
{ jobCode = x });
IEnumerable<UserJobsDTO> list = list3(jobs, notObtained);
ViewBag.jobCode = new SelectList(list, "jobCode", "Description");
var model = new UserJobsDTO { usrCode = usrCode, jobCode = list};
return View("AddJob", model);
}
public class UserJobsDTO
{
public string usrCode { get; set; }
public IEnumerable<String> jobCode { get; set; }
public String Description { get; set; }
}
任何人都可以帮助我吗?目前的主要问题是jobCode = x抱怨....
Error 1 Cannot implicitly convert type
'string' to 'System.Collections.Generic.IEnumerable<string>'
并且list3变量抱怨这个....
Error 2 'list3' is a 'variable' but is used like a 'method'
答案 0 :(得分:3)
错误确切地说明了问题是什么......
无法隐式转换类型 'string'到'System.Collections.Generic.IEnumerable'
工作代码是一个集合:
public IEnumerable<String> jobCode { get; set; }
但是你要为它分配一个非收集值:
list2.Select(x => new UserJobsDTO()
{ jobCode = x })
所以要么你需要让jobCode
成为一个字符串(这样任何给定的DTO实例都有一个值)或者将整个集合设置为它(这样任何给定的DTO实例都有值列表)。
'list3'是'变量',但用作'方法'
我完全不知道你在这里尝试做什么:
IEnumerable<UserJobsDTO> list = list3(jobs, notObtained);
但是,正如错误所述,list3
是变量而不是方法。你不能像方法一样调用变量。
非常令人困惑您要在此代码中尝试完成的任务。而且,老实说,目前最好的建议只是在调试器中单步执行,检查您拥有的运行时值,并真正考虑如何为视图构造这些值。
特别是,非常有助于在语义上区分奇异值和复数值。例如,像UserJobsDTO
或jobCode
这样的术语意味着某种程度的奇点和多数,但它们的类型和结构与此不一致。 (字符串的集合如何成为单个“代码”?)
您正在使用的结构的名称和类型非常重要能够在逻辑上理解和表达您正在尝试做的事情。