Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用linq查询向IEnumerable列表添加列_C#_Asp.net Mvc 3_Linq - Fatal编程技术网

C# 如何使用linq查询向IEnumerable列表添加列

C# 如何使用linq查询向IEnumerable列表添加列,c#,asp.net-mvc-3,linq,C#,Asp.net Mvc 3,Linq,在控制器构造函数中,我初始化IEnumerable列表,并将其作为模型传递给视图 IEnumerable<classB> mdata; public MyController() { DataContext context = new DataContext(//connectionstring code missing//); mdata = context.GetTable<classB>().ToArray(); } 您不能更改ClassB定义(在运

在控制器构造函数中,我初始化IEnumerable列表,并将其作为模型传递给视图

IEnumerable<classB> mdata;

public MyController()
{
   DataContext context = new DataContext(//connectionstring code missing//);
   mdata = context.GetTable<classB>().ToArray();
}

您不能更改ClassB定义(在运行时添加/删除属性)-该定义中应该存在级别属性。但您可以通过id连接这两个序列,然后选择新的匿名对象,该对象将具有级别和连接的ClassB实例:

var query = from b in mdata
            join t in list on b.Id equals t.Item1
            select new {
               B = b,
               Level = t.Item2
            };
正在更新ClassB中的
级别
属性:

foreach(var pair in query)
   pair.B.Level = pair.Level;

另一个选项(您将避免创建匿名对象):


如何在强类型类中添加列?什么是
classB
?你不能像那样访问
x=>list[].Item1..
中的
list[]
。如果我向mdata添加了Level属性,我可以更新它吗?它们只能是Level 0-3。因此,我可以每次更新属性。这可能吗?@user2906420是的,这是可能的-在获得匹配对后,您可以枚举结果并更新mdataSergey我想使用第二个选项与toDictionary一起使用,因为我想更新mdata中的列-但是给出了一个错误,因为我的Item1 ID可能有重复的值-我如何克服这个问题???@user2906420如果您有重复的元组,然后
var levels=list.Distinct().ToDictionary(t=>t.Item1,t=>t.Item2)-由于元组在GetHashCode中具有内置项且等于实现Sergey,因此它不起作用。错误:“已添加具有相同键的项。”。我的代码是:
var list=(list)Session[“list”]//检索不同的控制器变量级别=list.Distinct().ToDictionary(t=>t.Id,t=>t.Level)//此处出现错误
var query = from b in mdata
            join t in list on b.Id equals t.Item1
            select new {
               B = b,
               Level = t.Item2
            };
foreach(var pair in query)
   pair.B.Level = pair.Level;
var levels = list.ToDictionary(t => t.Item1, t => t.Item2);
foreach(var b in mdata)
{
    int level;
    if (levels.TryGetValue(b.Id, out level))
        b.Level = level;
}