0
foreach (var item in MyDatas)
{
List<int> MyIntegerIdValues= item.StringIdValues.Split(',').Select(i => int.Parse(i)).ToList();
foreach (var Id in MyIntegerIdValues)
{
List<string> UserNameList= context.KULLANICILAR.Where(s => s.UserId== Id ).Select(s => s.UserName).ToList();
}
}

私は 3 つの ID データ値を持っていますが、UserNameList には常に 1 つのカウント データがあります。すべてのデータをリストに保持することはできません。すべてのデータを UserNameList に保持するにはどうすればよいですか?

4

1 に答える 1

2

理解できるかどうか見てみましょう...ユーザー情報を含むDBルックアップテーブルがあり、すべてのユーザーIDのリストからすべてのユーザー名が必要ですか? さらに処理を行う場合を除き、foreach ループはまったく必要ありません。選択でもそれができるのではないかと思います。このlinqステートメントを試してください...

List<string> UserNameList = context.KULLANICILAR.Where(x=> MyIntegerIdValues.Contains(x.UserId)).Select(x=>x.UserName).ToList();

LinqPad の完全なサンプルとして、以下のコードを確認してください。出力は以下にもあります...

public class KULLANICILARItem {
    public int UserId {get;set;}
    public string UserName {get;set;}
}

void Main()
{
    // Fake DB Context
    List<KULLANICILARItem> KULLANICILAR = new List<KULLANICILARItem>() {
        new KULLANICILARItem() {
            UserId = 1,
            UserName = "Bob"
        },
        new KULLANICILARItem() {
            UserId = 2,
            UserName = "Jane"
        },
        new KULLANICILARItem() {
            UserId = 3,
            UserName = "Soner"
        },
    };

    // Fake ID List
    List<int> MyIntegerIdValues = new List<int>() {
        1, 2, 3
    };

    List<string> UserNameList = KULLANICILAR.Where(x=> MyIntegerIdValues.Contains(x.UserId)).Select(x=>x.UserName).ToList();

    UserNameList.Dump();
}


Output:
Bob
Jane
Soner

リストのリストをループするには、文字列リストの定義を foreach ループの外に移動してから、範囲を追加するだけです。

public class KULLANICILARItem {
    public int UserId {get;set;}
    public string UserName {get;set;}
}

void Main()
{
    // Fake DB Context
    List<KULLANICILARItem> KULLANICILAR = new List<KULLANICILARItem>() {
        new KULLANICILARItem() {
            UserId = 1,
            UserName = "Bob"
        },
        new KULLANICILARItem() {
            UserId = 2,
            UserName = "Jane"
        },
        new KULLANICILARItem() {
            UserId = 3,
            UserName = "Soner"
        },
        new KULLANICILARItem() {
            UserId = 4,
            UserName = "Jim"
        }
    };

    List<string> UserNameList = new List<string>();

    foreach(var StringIdValues in new string[] { "1,2", "3,4"} )
    {
        List<int> MyIntegerIdValues = StringIdValues.Split(',').Select(i => int.Parse(i)).ToList();
        UserNameList.AddRange(KULLANICILAR.Where(x=> MyIntegerIdValues.Contains(x.UserId)).Select(x=>x.UserName).ToList());
    }

    UserNameList.Dump();
}
于 2013-10-02T16:15:00.803 に答える