我已经找到了这个问题的答案,但我仍然遇到问题,并且想知道我做错了什么......
我有我的MVC项目,并使用LINQ从我的数据库中的两个表中获取数据。我需要离开加入第二个表但是我收到错误
对象引用未设置为对象的实例
问题出在我的模型中,特别是正在加入的表中。这是我的代码:
public void DATA(string searchString)
{
newList = new List<ResultsList>();
var res = from f in searchDB.CUSTOMERS
join cd in searchDB.CUSTOMER_DETAILS
on f.cust_id equals cd.cust_id into grouped
from gr in grouped.DefaultIfEmpty()
where f.ProductName.Equals(searchString)
select new { f, gr };
foreach (var item in surname)
{
ResultsList rl = new ResultsList();
rl.Forename = item.f.Forename;
rl.Postcode = item.gr.postcode;
rl.ProductName = item.f.ProductName;
newList.Add(rl);
}
}
答案 0 :(得分:4)
您可以通过编写简化代码并摆脱for循环:
var rl = (from f in searchDB.CUSTOMERS
join cd in searchDB.CUSTOMER_DETAILS
on f.cust_id equals cd.cust_id into grouped
from gr in grouped.DefaultIfEmpty()
where f.ProductName == searchString
select new ResultsList
{
Forename = f.Forename,
Postcode = gr == null ? null : gr.postcode,
ProductName = f.ProductName
}).ToList();
它也可能仅适用于Postcode = gr.postcode
。取决于Linq数据库提供程序的智能程度。
答案 1 :(得分:-5)
在foreach部分中,我添加了一个if语句来查看连接表中的列是否为null然后应用我需要的所有内容减去连接列,否则我使用了两个表中所需的所有内容。
foreach (var item in res)
{
ResultsList rl = new ResultsList();
if (item.gr != null)
{
rl.Forename = item.f.Forename;
rl.Postcode = item.gr.postcode;
rl.ProductName = item.f.ProductName;
}
else
{
rl.Forename = item.f.Forename;
rl.ProductName = item.f.ProductName;
}