使用Entity Framework并检查另一个表中是否存在userid

时间:2014-04-08 22:04:31

标签: c# json visual-studio-2010 asp.net-mvc-3 entity-framework

使用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.

我该如何处理?

3 个答案:

答案 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表是正确的。 forein key 然后,您可以直接从对象访问关系。 像这样的东西

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
);