使用MVC3,EntityFramework 4,C#,VS 2010,我有以下内容:
foreach (var person in _db.People.OrderByDescending(p => p.LastUpdated))
{
data.Add(new List<string>
{
person.UserId,
person.FullName,
person.Title
}
}
return Json(data, JsonRequestBehavior.AllowGet);
我想添加一个列/字段来检查另一个实体对象以查看该人是否存在于另一个表中,然后显示是否存在Y / N.
我该如何处理?
答案 0 :(得分:1)
如果我的猜测正确,您希望字符串列表中的其他列告诉您&#34; Y&#34; 如果该表中存在此人并且&#34; N& #34; ,如果没有。试着这样做:
foreach (var person in _db.People.OrderByDescending(p => p.LastUpdated))
{
data.Add(new List<string>
{
person.UserId,
person.FullName,
person.Title,
(_db.AnotherTable.Where(p => p.personID == person.personID).FirstOrDefault() == null? "Y": "N")
}
}
答案 1 :(得分:0)
此实体与另一个表之间需要LINQ / Lambda外连接。连接后另一个表中的任何空值表示该人仅存在于第一个表中。我现在没有时间写出解决方案,但很乐意在早上这样做
您的Json列表结构也是错误的。
答案 2 :(得分:0)
将外键添加到People表是正确的。 然后,您可以直接从对象访问关系。 像这样的东西
foreach (var person in _db.People.OrderByDescending(p => p.LastUpdated))
{
data.Add(new List<string>
{
person.UserId,
person.FullName,
person.Title,
person.SomePeople2.Any() ? "Y" : "N"
}
}
return Json(data, JsonRequestBehavior.AllowGet);
但是如果你不想添加外键,你可以这样做
foreach (var person in _db.People.OrderByDescending(p => p.LastUpdated))
{
data.Add(new List<string>
{
person.UserId,
person.FullName,
person.Title,
(_db.SomePeople2.Any(x=>x.UserId == p.UserId) ? "Y" : "N")
}
}
return Json(data, JsonRequestBehavior.AllowGet);
<强> UPD 强> 规范化代码:
return Json(
_db.People.OrderByDescending(p =>
p.LastUpdated
).Select(p =>
new
{
ID = person.UserId,
Name = person.FullName,
Title = person.Title,
InOtherTable = _db.SomePeople2.Any(x=>x.UserId == p.UserId)
}
).ToArray(),
JsonRequestBehavior.AllowGet
);