从列表对象中查找特定项目

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从列表对象中查找特定项目相关的知识,希望对你有一定的参考价值。

我有一个对象列表:

 List<Object> allUserDatas = new List<Object>();

我已阅读数据表单数据库并将记录(行)存储在此allUserDatas列表中。

allUserDatas = getUserData(userDetails.Ownerid, userDetails.LoggedIn);

当我试图从这个列表中获取数据时,我无法做到这一点。

enter image description here

如何从此列表中获取特定数据项?

例如:仅AssignedToGroup和CallerId

我使用了Entity Framework,通过使用我已经读取了我的数据并将其分配给List<object>

public List<object> getUserData(string Id,DateTime loggedIn) 
{ 
    List<object> userDatas = new List<object>(); 

    using (UsersEntities entity = new UsersEntities()) 
    { 
         tblUserData data = new tblUserData(); 
         userDatas.Add(entity.tblUserDetails.Where(x => x.Ownerid == Id && x.LoggedIn==loggedIn).FirstOrDefault()); 
    } 

    return userDatas; 
}
答案

更新

看到你的代码后

// And for the love of all thins neat and tidy in this world
// start methods with a capital letter :)
public tblUserData GetUserData(string Id, DateTime loggedIn)
{
   using (UsersEntities entity = new UsersEntities())
   {
      return entity.tblUserDetails
                   .FirstOrDefault(x => x.Ownerid == Id && x.LoggedIn == loggedIn);
   }

}

原版的

键入时更容易

List<tblUserDetail> allUserDatas = new List<tblUserDetail>();

// populate it some how

allUserDatas = getUserData(userDetails.Ownerid, userDetails.LoggedIn).Cast<tblUserDetail>();

// now you can use Linq, yehaaa
var filter = allUserDatas.Where(x => CallerId == "asdfadsf).ToList();

Enumerable.Cast Method (IEnumerable)

将IEnumerable的元素转换为指定的类型。

另一答案

您可以在Linq中使用where子句

allUserDatas.Where(C => C.CallerId == "asdfadsf")
另一答案

您需要在列表中强制转换值:

var soughtItem =  allUserDatas.Cast<tblUserDetails>().SingleOrDefault(x => x.CallerId == "asdfadsf");

这很直接。关键是您需要将对象强制转换为您真正想要使用的类型。

这也有效:

        var soughtItem = allUserDatas.SingleOrDefault(o => ((tblUserDetails)o).CallerId == "asdfadsf") as Item;

如果多个匹配,这些示例将给您一个错误。您可以像使用FirstOrDefault一样使用FirstOrDefault,或者如果您的目标是选择多个,您可以这样做:

var results = items.Where(o => ((tblUserDetails)o).CallerId == "asdfadsf")
                   .Select(o => o as tblUserDetails).ToList();

你有很多选择。

以上是关于从列表对象中查找特定项目的主要内容,如果未能解决你的问题,请参考以下文章

如何将列表视图中的数据从一个片段发送到另一个片段

从 Apollo 缓存中读取特定类型的所有片段

是否可以将一个对象从一个片段发送到另一个片段?

如何从对象数组中获取具有属性的列表,除非它包含具有特定值的另一个项目?

在用户定义的列表中查找具有最大字符数的类对象的项目

在列表中查找具有特定值的对象