我是LINQ的新手
我想写linq来获取list <usertypeclass>
和list <string>
我有一个班级
public class Hashtable
{
public string Id
{
get;
set;
}
public string MediaType
{
get;
set;
}
public string Href
{
get;
set;
}
}
然后我使用这个类在列表中添加值
var list = new List<Hashtable>
{
new Hashtable { Id = "x001.xhtml", MediaType = "application/xhtm+xml", Href = "text/001.xhtml" },
new Hashtable { Id = "x002.xhtml", MediaType = "application/xhtm+xml", Href = "text/002.xhtml" },
new Hashtable { Id = "x003.xhtml", MediaType = "application/xhtm+xml", Href = "text/003.xhtml" }
};
我有另一个包含以下值的列表:
List<string> lstrhtml = new List<string>();
lstrhtml.Add("contents.xhtml");
lstrhtml.Add("x003.xhtml");
lstrhtml.Add("x002.xhtml");
lstrhtml.Add("x001.xhtml");
现在我需要使用linq来匹配两个列表和id值,例如x003.xhtml和提取href值,我到目前为止尝试的是:
var val=list.Where(o=>lstrhtml.Contains(o["Id"].ToString()))
.Select(o=>o["Href"]).ToList();
但它给了我错误....请回复并建议我哪里出错了
提前致谢
答案 0 :(得分:3)
听起来你只需要一个加入:
var query = from id in lstrhtml
join hashtable in list on id equals hashtable.Id
select hashtable.href;
foreach (string href in query)
{
Console.WriteLine(href);
}
(旁注:如果可能的话,我个人会避免使用名称Hashtable
,因为许多读者在看到它时都会想到System.Collections.Hashtable
。)
答案 1 :(得分:0)
基本上你需要在列表之间进行内部联接,而不是包含
var query =
from h in listofHashtable
join s in lstrhtml
on h.Id equals s
select h.Href;