1

これが目標です:人の一般的なリストを取得し、モデルで男性、女性、子供別に並べ替えます...このサイトとプライバシーのために名前も変更しました. 以下のラムダ式に注目してください! ありがとうございました!

次のエラーが表示されます。

System.Collections.Generic.IEnumerable<bool>からに変換できません System.Collections.Generic.IEnumerable<Project1.DataClasses.DataObjects.People>

ピープルモデル:

public List< People> Men { get; set; }
public List< People> Women { get; set; }
public List< People> Kids { get; set; }
public List< People> Babies { get; set; }

コントローラ:

public ActionResult GetPeople(PeopleModels Peoples)
{
    List<People> listPeoples = new List<People>();

    listPeoples = DataClass.GetAllPeoples();

    // this is the code I cannot get to work.
    var men = listPeoples .Select(m => m.Sex == "M");
    Peoples.Men = men.ToList<People>();

    // Women, Children too..

    return View("Employees", Peoples);
}
4

5 に答える 5

7

Whereあなたは声明を探しています。

  // Get People wher the Sex = "M"
  Peoples.Men = listPeoples.Where(m => m.Sex == "M").ToList();
于 2013-02-20T06:49:07.503 に答える
4

現在、プロパティのみを選択してm.Sexそのリストを割り当てようとしList<People>ているため、エラーが発生します。あなたは簡単に行うことができます:

Peoples.Men = listPeoples.Where(m => m.Sex == "M").ToList();

また、必要はありません。Tolist<People>()シンプルで十分ですToList()

于 2013-02-20T06:50:45.570 に答える
2

Linq クエリの基本を理解していない。「選択」ステートメントは結果を投影する必要があります。例えば:

var a = new List<string>{"ab", "abc", "abcd"};
var b = a.Select(x=>x.Length).ToList();

ここで起こることは、すべての「a」要素の長さを選択し、それらを現在List<int>含まれている変数 b に保存することです{2,3,4}

必要なのは、コレクション (任意の IEnumerable オブジェクト) の述語によってオブジェクトをフィルター処理する "Where" ステートメントです。

var c = a.Where(x=>x.Length<4).Select(x=>x.Length).ToList();

別の構文:

var c = (from element in a 
         where element.Length<4
         select x=>Length).ToList();

リスト内要素から 長さが 4 文字未満の要素を取得し、それらの長さをすべて選択し、それらをリストに入れ、 c変数に代入する必要があると言います。

トピックの詳細を読み、これらのサンプルを確認することをお勧めします

于 2013-02-20T07:49:12.073 に答える
1

あなたの男性コレクションにはブール型のアイテムが含まれています。

  var men = listPeoples .Select(m => m.Sex == "M"); // returns a boolean  collection     satisfying the condition
  Peoples.Men = listPeoples .Where(m => m.Sex == "M").ToList(); // This should be what you want 

あなたもできる

var men = listPeoples .Where(m => m.Sex == "M");
Peoples.Men = men.ToList();
于 2013-02-20T07:03:19.887 に答える
0

group を使用すると、各タイプを独自のコレクションに入れることができます。

var grouped = from person in people
    group person by person.Type into g
    select new {Key = g.Key, people = g};

唯一の問題は、各コレクションを選択することです.これは私がこれまでに得た最高のものです:

List<Person> men = new List<Person>(), women = new List<Person>(), children = new List<Person>(), babies = new List<Person>();

foreach (var persons in grouped)
{
    switch (persons.Key)
    {
        case PersonType.Male: men = persons.people.ToList(); break;
        case PersonType.Female: women = persons.people.ToList(); break;
        case PersonType.Child: children = persons.people.ToList(); break;
        case PersonType.Baby: babies = persons.people.ToList(); break;
    }
}
于 2013-08-19T06:41:09.877 に答える