2

リストがありますAllIDs

List<IAddress> AllIDs = new List<IAddress>();

私はやってみたいですsubstringメンバーフィールドに対する操作AddressId文字 "_"に基づきます。

以下のLINQクエリを使用していますが、コンパイルエラーが発生します。

AllIDs= AllIDs.Where(s => s.AddressId.Length >= s.AddressId.IndexOf("_"))
    .Select(s => s.AddressId.Substring(s.AddressId.IndexOf("_")))
    .ToList();

エラー:

暗黙的に型 'System.Collections.Generic.List< string>'を 'System.Collections.Generic.List< MyCompany.Common.Users.IAddress>に変換することはできません

3 답변


3

AllIDsのリストですIAddressしかし、あなたはstring。コンパイラは変換できないと文句を言っていますList<string>List<IAddress>。代わりに次のことを意味しましたか?

var substrings = AllIDs.Where(...).Select(...).ToList();


  • しかし問題は、ドロップダウンのデータソースとして結果リストを提供したいということです。そして結果として得られるリストは、プロパティAddressIDを持っていません。 - user1740172

0

あなたがそれらを元に戻したい場合Addressオブジェクト(あなたがAddressあなたに加えてクラスIAddress()のようにすることができます。Addressあります):

AllIDs = AllIDs.Where(...).Select(new Address(s.AddressID.Substring(s.AddressID.IndexOf("_")))).ToList();

メソッド構文の代わりにLINQにクエリ構文を使用することも検討する必要があります。これにより、このような多くのクエリのクリーンアップと読みやすさが向上します。元の(変更されていない)クエリは、これとほぼ同じです。

var substrings = from a in AllIDs
                 let id = a.AddressId
                 let idx = id.IndexOf("_")
                 where id.Length >= idx
                 select id.Substring(idx);

これは実際には単なるスタイルのものですが、これは元のものと同じものにコンパイルされます。ちょっと違いがあるのは、電話をかけるだけでいいということです。String.IndexOf()エントリごとに2回ではなく、エントリごとに1つ。letあなたの友だちです。


  • こんにちはマシューは、回答いただきありがとうございます。しかし問題はドロップダウンのデータソースとしてあなたの例の部分文字列に結果のリストを提供したいのです。そして、結果として得られるリストは、以下のように使用されているプロパティAddressIDを持ちません。 ddl.DataSource = AllIDs; ddl.DataTextField = "AddressID"; ddl.DataValueField =" AddressID"; ddl.DataBind();私はForEachを使うことができますが、LINQを使ってやりたいのです。任意のポインタ? - user1740172
  • スズメバチの解決策を見て、それはこのデータバインディングで動作するはずです。 - Matthew Kennedy

0

たぶんこれ?

var boundable  = 
    from s id in AllIDs
    where s.AddressId.Length >= s.AddressId.IndexOf("_")
    select new { AddressId = s.AddressId.Substring(s.AddressId.IndexOf("_")) };
boundable = boundable.ToList();

関連する質問

最近の質問