繁体   English   中英

使用实体框架并检查另一个表中是否存在用户标识

[英]Using Entity Framework and check if userid exists in another table

使用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(如果存在/不存在)。

我将如何处理?

如果我的猜测是正确的,那么您希望字符串列表中的另一列告诉您该表上是否存在人员,如果是,则为“ Y”,否则,则为“ N” 尝试这样做:

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")
            }    
        }

您需要此实体与另一个表之间的LINQ / Lambda外部联接。 联接后另一个表中的任何空值都表示此人仅存在于第一个表中。 我目前没有时间编写解决方案,但很高兴在早上这样做

您的Json列表结构也是错误的。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM