0

EntityフレームワークでMVC3を使用していました。今回はリストでユニークなアイテムを作りたかった。これが私のアイテムのリストです。

リスト

1.Overdue-1
2.Overdue-M
3.ItemsDue-1
4.ItemsDue-5

上記のリストの中で、このリストだけを取得するようにフィルタリングしたかっただけで、

1.Overdue
2.Itemsdue

また、これを DropdownList として作成する必要があります。ここで、Overdue または Itemsdue をドロップダウン テキスト フィールドとして、1 ~ n を値フィールドとして指定します。私はこれを試しました。しかし、ドロップダウンと一意のリストのロジックを実行できました。

コード

var select = (from asd in db.Sys
                      select new EmailTemp
                      {
                          SysCode = asd.Code,
                          SysmailId = asd.Id
                      }).Distinct().ToList();
        List<EmailTemp> filterlist = new List<EmailTemp>();
        foreach (var a in select)
        {
            string lates = a.SysCode;
            var ind = lates.IndexOf("-");
            if (ind > 0)
            {
                a.SysCode = lates.Substring(0, ind);
                a.SysmailId = a.SysmailId;
                filterlist.Add(a);
            }
            else
            {
                a.SysCode = lates;
                a.SysmailId = a.SysmailId;
                filterlist.Add(a);
            }
        }
        //var idlist = filterlist.Distinct().ToList();
        ViewBag.SysMailType = new SelectList(filterlist.Distinct().ToList(), "SysmailId", "SysCode");

Pls は、私のロジックを実現するためにコードを書き留めることができる可能性を教えてくれます。

ありがとう

4

1 に答える 1

0

カスタム等値比較子を作成し、それを使用して を使用して項目を比較できますDistinct

class MyEqualityComparer: EqualityComparer<EmailTemp>
{
    private string GetPrefix(string s)
    {
        var pos = sIndexOf("-");
        var rslt = (pos > 0) ? s.SubString(0, pos) : s;
        return rslt;
    }

    public override bool Equals(EmailTemp t1, EmailTemp t2)
    {
        var s1 = GetPrefix(t1.SysCode);
        var s2 = GetPrefix(t2.SysCode);
        return s1.Equals(s2);
    }

    public override int GetHashCode(EmailTemp t1)
    {
        return GetPrefix(t1.SysCode).GetHashCode();
    }
}

そして、一意のアイテムのリストを生成するには:

List<EmailTemp> filterList = select.Distinct(new MyEqualityComparer()).ToList();

それを最初の LINQ 式と組み合わせる方法はおそらくあるでしょう。おそらく他の誰かが声をかけてくれるでしょう。

于 2013-03-18T13:26:10.513 に答える