Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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选择新错误。无法访问列表_C#_Linq - Fatal编程技术网

C# LINQ选择新错误。无法访问列表

C# LINQ选择新错误。无法访问列表,c#,linq,C#,Linq,我的Linq查询是 string spouseName="jenny"; var empData = from sData in EmpList from member in sData.familyNames where string.Compare(member, spouseName, true) == 0 select new Employee {

我的Linq查询是

string spouseName="jenny";
var empData = from sData in EmpList
              from member in sData.familyNames
              where string.Compare(member, spouseName, true) == 0
              select new Employee
              {
                  CompanyDept = sData.company,
                  EmpName = sData.empName,
                  FamilyNames.Add(spouse)   //ERROR HERE Not able to access as list
              };
这里的员工列表是
列表

class员工
{
私有字符串公司
私有字符串名称
私有列表_familyNames=新列表();
公共字符串公司
{
获取{return companyDept}
设置{companyDept=value;}
}
公共字符串名称
{
获取{return empName}
设置{empName=value;}
}
公开名单家庭名称
{
获取{return\u familyNames}
设置{u familyNames=value;}
}
}
问题:

在这里,我试图获得类型为
Employee
的linq输出。。。但是家庭名称列表只包含一项配偶名称,而不是所有家庭成员的列表

但是我在familyList上出错了。无法将项目添加到familyNames列表,无法分配


需要帮助,为什么会出现错误或我在某个地方出错?

您需要自己初始化列表。更改:

FamilyNames.Add(spouse)
致:

FamilyNames=新列表(新[]{配偶})

它应该是

select new Employee
{
    CompanyDept = sData.company,
    EmpName = sData.empName,
   // FamilyNames.Add(spouse)   //ERROR HERE Not able to access as list
     FamilyNames = new List<string> {spouse}
} ;
选择新员工
{
CompanyDept=sData.company,
EmpName=sData.EmpName,
//FamilyNames.Add(party)//此处出错,无法访问as列表
FamilyNames=新列表{配偶}
} ;

虽然我本以为是
sData.party
member.party

正确的翻译是:

select new Employee
{
    CompanyDept = sData.company,
    EmpName = sData.empName,
    FamilyNames = { spouse } // 'nested' collection-initializer
};
原因是您只需要对
FamilyMember
进行
Add
调用,而不需要将完整的属性重新分配到新列表,这正是
familymames=newlist{party}
所要做的

粗略地说,这意味着:

var temp = new Employee();
temp.CompanyDept = sData.company;
temp.EmpName = sData.empName;
temp.FamilyNames.Add(spouse);
return temp; // this is selected.

哦,thanx。。。成功了。但为什么会这样。我的意思是,每当我创建employee的任何对象时,我都可以直接添加到familyNames。但是为什么不在这种情况下呢?这就是工作的方式。基本上,在构造对象时不能访问成员属性,但可以指定给它,因为这是真的。但是当我们以正常的方式初始化时,我们也可以使用成员属性。。。员工ee=新员工();ee.companyDept=“xyz”ee.empName=“abc”ee.FamilyName.Add(“NameAny”),这样我们就可以访问。那么我的LINQ案例会发生什么呢?既然OP只需要一个
添加
(而不是对列表进行完全重新分配),那么就做最后一行:
FamilyNames={party}
有,它是在字段初始值设定项中创建的。@Ani,是的,我错过了。我更喜欢
select
我自己里面的
new
。想象一下,如果a)没有setter-不会编译b)列表在构造函数中预先填充-不同的结果。我不知道你可以这样做!隐马尔可夫模型。。。。这也行得通。这些是4.0特性。我们可能会指定要添加的新列表。
select new Employee
{
    CompanyDept = sData.company,
    EmpName = sData.empName,
    FamilyNames = { spouse } // 'nested' collection-initializer
};
var temp = new Employee();
temp.CompanyDept = sData.company;
temp.EmpName = sData.empName;
temp.FamilyNames.Add(spouse);
return temp; // this is selected.