【问题标题】:Nested foreach using by linq in asp.net mvc在 asp.net mvc 中由 linq 使用的嵌套 foreach
【发布时间】:2013-10-02 15:59:24
【问题描述】:
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 中?

【问题讨论】:

    标签: linq asp.net-mvc-4 foreach nested


    【解决方案1】:

    让我看看我是否理解...您有一个包含用户信息的数据库查找表,并且您想要所有用户 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();
    }
    

    【讨论】:

    • 它只适用于第一个列表我有很多列表我需要 foreach 你知道吗?
    • MyIntegerIdValues 有数据。 1. data : 1, 2, 3 2. data : 6,7,8 您的代码仅适用于 1. data 而不是第二个。这就是为什么我需要 foreach 直到数据完成
    • 我认为这可以用更少的代码完成,但为了满足您的要求和示例,我已经更新了我的答案。您需要将列表移到 foreach 循环之外,并使用 AddRange 将名称添加到列表中。
    猜你喜欢
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多