有没有什么方法可以使用 linq 查询来过滤嵌套列表,以便我最终得到经过充分过滤的列表的过滤列表?

我在过滤嵌套在更大列表中的字符串列表时遇到问题。


我尝试过这样的事情:


myList.FindAll(d => d.activities.Any(i => i.type.Contains("read")));

但似乎有人正在回归


我有一个“UserData”结构,如图所示:


public class UserData

{

   public int id;

   public List<UserActivity> activities;

}

public class UserActivity

{

   public string activity;

   public string type;

}

有f.ex。两种类型的活动(“读”和“写”)


我想做的是过滤给定的内容,List<UserData> myList如图所示


List<UserData> newList = new List<UserData>();


foreach(UserData d in myList){

    UserData newD = new UserData();

    newD.id = d.id;

    newD.activities= d.activities.FindAll(i =>

i.type.Contains("read"));


    if (newD.activities.Any())

        newList.Add(newD);

}

有没有办法用 Linq 查询巧妙地做到这一点?


我想要弄清楚的是一个简短而整洁的 Linq 查询来过滤我所描述的嵌套列表......我知道这可能是一个装饰问题,但它仍然让我很困扰。


拉丁的传说
浏览 84回答 3
3回答

萧十郎

var newList = (from userData in myList&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;let newActivities = userData.activities.Where(i => i.type.Contains("read"))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;where newActivities.Any()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;select new UserData { id = userData.id, activities = newActivities.ToList() }).ToList();

慕侠2389804

我通过使用解决了这个问题:newList&nbsp;=&nbsp;myList.Where(d&nbsp;=>&nbsp;d.activities.Any(act&nbsp;=>&nbsp;act.type.Contains("read"))) &nbsp;&nbsp;&nbsp;&nbsp;.Select(d&nbsp;=>&nbsp;new&nbsp;UserData&nbsp;{&nbsp;id&nbsp;=&nbsp;d.id,&nbsp;activities&nbsp;=&nbsp;new&nbsp;List<UserActivity>(&nbsp;d.activities.FindAll(act&nbsp;=>&nbsp;act.type.Contains("read"))&nbsp;)&nbsp;}) &nbsp;&nbsp;&nbsp;&nbsp;.ToList();

慕尼黑8549860

尝试以下操作:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List<UserData>&nbsp;newList&nbsp;=&nbsp;myList.Select(x&nbsp;=>&nbsp;new&nbsp;UserData()&nbsp;{&nbsp;id&nbsp;=&nbsp;x.id,&nbsp;activities&nbsp;=&nbsp;x.activities.Where(y&nbsp;=>&nbsp;y.type.Contains("read")).ToList()&nbsp;}) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Where(x&nbsp;=>&nbsp;x.activities.Count&nbsp;>&nbsp;0) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.ToList();
打开App,查看更多内容
随时随地看视频慕课网APP