-1

投稿を編集します。3 つのメソッドがデータベース テーブルから行を返すと仮定すると、次docTagsのように tags なりdocsます。docTags は中間テーブルです。1 つのdoc(ドキュメント) は多数tagsを持つことができ、1 つは多数tagに属するdocs ことができます。取得方法:TagKey = "123" どこで docTags.Add(new Configuration(1, 1));

    class Program
    {

        static void Main(string[] args)
        {

        }
    }

    public class Configuration
    {
        public  int  DocID { get; set; }
        public int TagID { get; set; }
        public string Name { get; set; }
        public string DocKey { get; set; }
        public string TagKey { get; set; }

        public Configuration(int _docId,string _name, string _docKey)
        {
            DocID = _docId;
            Name = _name;
            DocKey = _docKey;
        }
        public Configuration(int _tagId,string name, string _dockey,string _tagKey)
        {
            TagID = _tagId;
            Name = name;
            TagKey = _tagKey;
        }
        public Configuration(int _tagId, int _docId)
        {
            TagID = _tagId;
            DocID = _docId;
        }
        public static List<Configuration> getDocType()
        {
            List<Configuration> docs = new List<Configuration>();
            docs.Add(new Configuration(1,"contract", "xxx"));
            docs.Add(new Configuration(2,"Action", "yyy"));
            return docs;
        }

        public static List<Configuration> getTagName()
        {
            List<Configuration> tags = new List<Configuration>();
            tags.Add(new Configuration( 1,"contractid", "123"));
            tags.Add(new Configuration(2,"SuperDuper", "332123"));
            tags.Add(new Configuration(22, "rama", "yyy"));
            tags.Add(new Configuration(32, "aktiv",  "123456"));
            tags.Add(new Configuration(42, "data ","xx764fhx"));
            return tags;

        }
        public static List<Configuration> getDocTags()
        {
            List<Configuration> docTags = new List<Configuration>();
            docTags.Add(new Configuration(1, 2));
            docTags.Add(new Configuration(1, 1));
            docTags.Add(new Configuration(1, 22));
            docTags.Add(new Configuration(2, 2));
            docTags.Add(new Configuration(2, 32));
            return docTags;
        }        
    }
}
4

4 に答える 4

5

あなたが欲しいJoin

var commonUsers = (from t in tags
                  join d in docs on t.DocKey equals d.DocKey
                  select t)
                  .Distinct();  // to remove duplicates

または別の方法

var commonUsers = tags.Where(t => docs.Any(d => d.DocKey == t.DocKey));

2 番目の方法は時間はかかりませんが、最初の方法の方がパフォーマンスが高い可能性があります。

于 2013-08-29T20:39:48.817 に答える
1

Equals メソッドをオーバーロードせずにIntersectを使用してこれを行う方法を次に示します。として渡す新しいクラスを作成する必要があります。IEqualityComparer

class ConfigurationComparer : IEqualityComparer<Configuration>
{
    //You can change which string comparer fits your needs best.
    private readonly StringComparer comparer = StringComparer.CurrentCulture;

    public bool Equals(Configuration x, Configuration y)
    {
        return comparer.Equals(x.DocKey,y.DocKey);
    }

    public int GetHashCode(Configuration obj)
    {
         return comparer.GetHashCode(obj.DocKey);
    }

}

あなたはそれをするだけです

var newList = tags.Intersect(docs, new ConfigurationComparer());
于 2013-08-29T20:49:44.433 に答える
1
var newList = docs.Intersect(tags);

これを機能させるには、Equals 演算子をオーバーライドする必要がある場合があります。

于 2013-08-29T20:39:37.443 に答える
0

メソッドを使用Containsし、ラムダ式を含むフィルターに適用して、1 つ以上の条件を使用して、あるリストから別のリストの項目を抽出できます。例:

var result = needThis.Where(x => needThis2.Contains(x)).ToList();

Intersectまたは、サンプルとして拡張メソッドを使用します。

var result = needThis.Intersect(needThis2);
于 2013-08-29T20:38:33.137 に答える