1

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

今、私は両方のリストをid値と一致させるためにlinqを正しくする必要があります。たとえば、x003.xhtmlとextract href値の場合、

var val=list.Where(o=>lstrhtml.Contains(o["Id"].ToString()))
             .Select(o=>o["Href"]).ToList();

しかし、それは私にエラーを与えます....返信して、どこが間違っているのか教えてください

前もって感謝します

4

2 に答える 2

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

于 2012-06-02T06:53:30.013 に答える
0

基本的に、両方のリストの間で内部結合を行う必要があります。含まれているのではなく、タスクを実行します

var query =
from h in listofHashtable
join s in lstrhtml 
on h.Id  equals s
select h.Href;
于 2012-06-02T06:52:58.900 に答える