我想返回具有我发送的个人资料ID的项目。所以为了做到这一点,我需要遍历所有项目 - > WebProproperties - >轮廓。类结构就在问题的最后。
我宁愿使用LINQ而不是创建嵌套的foreach
。我一直试图让这个工作超过一个小时。我被卡住了。
我的第一个想法是简单地使用where
。但这并不奏效,因为你需要在另一方需要相同的东西。
this.Accounts.items.Where(a => a.webProperties.Where(b => b.profiles.Where(c => c.id == pSearchString)) ).FirstOrDefault();
我的第二个想法是尝试使用我不具备丰富经验的Exists
:
Item test = from item in this.Accounts.items.Exists(a => a.webProperties.Exists(b => b.profiles.Exists(c => c.id == pSearchString))) select item;
这不起作用:
无法找到源类型' Bool'
的查询模式的实现
public RootObject Accounts {get; set;}
public class RootObject
{
public string kind { get; set; }
public string username { get; set; }
public int totalResults { get; set; }
public int startIndex { get; set; }
public int itemsPerPage { get; set; }
public List<Item> items { get; set; }
}
public class Profile
{
public string kind { get; set; }
public string id { get; set; }
public string name { get; set; }
public string type { get; set; }
}
public class WebProperty
{
public string kind { get; set; }
public string id { get; set; }
public string name { get; set; }
public string internalWebPropertyId { get; set; }
public string level { get; set; }
public string websiteUrl { get; set; }
public List<Profile> profiles { get; set; }
}
public class Item
{
public string id { get; set; }
public string kind { get; set; }
public string name { get; set; }
public List<WebProperty> webProperties { get; set; }
}
答案 0 :(得分:6)
您可以使用Any()
来确定存在。另请注意,许多扩展方法都具有带谓词的重载,包括FirstOrDefault()
:
this.Accounts.items.FirstOrDefault(a => a.webProperties
.Any(b => b.profiles
.Any(c => c.id == pSearchString)));
答案 1 :(得分:1)
您正在寻找我认为的.Any()
操作。对于是否有与您的查询匹配的项目,这将返回true / false。
例如:
if (this.Accounts.Items.Any(i=>i.webProperties.Any(wp=>wp.profiles.Any(p=>p.id == MySearchId)));
编辑:你有完整的答案(在我撰写我的时候发布了)并且正如评论中所指出的那样,我的答案实际上并没有回复你找到的项目,只是让你知道是否有一个。您可以将第一个.Any
重做为.FirstOrDefault
以获得该匹配。
E.g。
var result = this.Accounts.Items.FirstOrDefault(i=>i.webProperties.Any(wp=>wp.profiles.Any(p=>p.id == MySearchId)))
答案 2 :(得分:0)
您可以使用下面提到的代码。
var abc = rr.items.Where(p => p.webProperties.Any(c => c.profiles.Any(d => d.id == "1"))).FirstOrDefault();
仅供您参考,您的课程应如下:
public class RootObject
{
public string kind { get; set; }
public string username { get; set; }
public int totalResults { get; set; }
public int startIndex { get; set; }
public int itemsPerPage { get; set; }
private List<Item> _items=new List<Item>();
public List<Item> items
{
get { return _items; }
set { _items = value; }
}
}