C# 在linq中存储变量
我今天面对这种情况,在网上找不到我想要的东西 看看这个代码C# 在linq中存储变量,c#,linq,entity-framework,C#,Linq,Entity Framework,我今天面对这种情况,在网上找不到我想要的东西 看看这个代码 myCollection.Select(g => new ReportLine { cds = (sectors.FirstOrDefault(s => s.SECT_CODE.Equals(g.Contract.Station.Sector.SECT_CODE)) != null ? sectors.FirstOrDefault(s => s.SECT_CODE.Equals(
myCollection.Select(g => new ReportLine
{
cds = (sectors.FirstOrDefault(s => s.SECT_CODE.Equals(g.Contract.Station.Sector.SECT_CODE)) != null ?
sectors.FirstOrDefault(s => s.SECT_CODE.Equals(g.Contract.Station.Sector.SECT_CODE)).USER != null?
sectors.FirstOrDefault(s => s.SECT_CODE.Equals(g.Contract.Station.Sector.SECT_CODE)).USER.USER_FIRSTNAME : "": "")
+ " " +
(sectors.FirstOrDefault(s => s.SECT_CODE.Equals(g.Contract.Station.Sector.SECT_CODE)) != null ?
sectors.Where(s => s.SECT_CODE.Equals(g.Contract.Station.Sector.SECT_CODE)).FirstOrDefault().USER != null?
sectors.Where(s => s.SECT_CODE.Equals(g.Contract.Station.Sector.SECT_CODE)).FirstOrDefault().USER.LASTNAME : "" : "")
});
基本上,“myCollection”是一个深层类的列表,这个请求进入其中,提取名字和姓氏,并将它们放在另一个类中,同时检查是否没有空值
您注意到,为了实现这一目标,我检查了相同的内容6次:
sectors.FirstOrDefault(s => s.SECT_CODE.Equals(g.Contract.Station.Sector.SECT_CODE))
(可能对性能有影响)
是否存在在linq表达式中“存储”值的方法?大概是这样的:
myCollection.Select(g => new ReportLine
{
cds = ((var tmp =sectors.FirstOrDefault(s => s.SECT_CODE.Equals(g.Contract.Station.Sector.SECT_CODE))) != null ?
tmp.USER != null?
tmp.USER.USER_FIRSTNAME + "" + tmp.USER.LASTNAME: "": "")
});
我想你可能不得不改变长手LINQ来实现它,但是你可以在表达式的中间分配变量。
< P>我想你可能不得不改变长手LINQ来实现它。但是你可以在表达式的中间分配变量。 我想你可能不得不改变长手LINQ来实现它,但是你可以在表达式的中间分配变量。 < P>我想你可能不得不改变长手LINQ来实现它。但是,您可以在表达式的中间分配变量。< /p> < p>可以将<代码>选择< <代码>语句中的逻辑提取到一个单独的方法中,并调用<代码> >选择< /Cord>语句> 类似于private string Foo(Sector input)
{
var tmp = g.SECT_CODE.Equals etc etc
return tmp.USER != null ? etc etc
}
您可以将
Select
语句中的逻辑提取到一个单独的方法中,并在Select
语句中调用它
类似于
private string Foo(Sector input)
{
var tmp = g.SECT_CODE.Equals etc etc
return tmp.USER != null ? etc etc
}
您可以将
Select
语句中的逻辑提取到一个单独的方法中,并在Select
语句中调用它
类似于
private string Foo(Sector input)
{
var tmp = g.SECT_CODE.Equals etc etc
return tmp.USER != null ? etc etc
}
您可以将
Select
语句中的逻辑提取到一个单独的方法中,并在Select
语句中调用它
类似于
private string Foo(Sector input)
{
var tmp = g.SECT_CODE.Equals etc etc
return tmp.USER != null ? etc etc
}
myCollection.Select(g=>{
var temp=sectors.FirstOrDefault()
返回新的ReportLine(){..}
})
myCollection.Select(g=>{
var temp=sectors.FirstOrDefault()
返回新的ReportLine(){..}
})
myCollection.Select(g=>{
var temp=sectors.FirstOrDefault()
返回新的ReportLine(){..}
})
myCollection.Select(g=>{
var temp=sectors.FirstOrDefault()
返回新的ReportLine(){..}
})
试试这个:
myCollection.Select(g => {
var sect_code = g.Contract.Station.Sector.SECT_CODE;
var sector = sectors.FirstOrDefault(s => s.SECT_CODE.Equals(sect_code));
var firstName = sector != null ?
(sector.USER != null ? sector.USER.USER_FIRSTNAME: "") :
"";
var lastName = sector != null ?
(sector.USER != null ? sector.USER.LASTNAME : "") :
"";
return new ReportLine
{
cds = string.Format("{0} {1}", firstName, lastName)
};
});
试试这个:
myCollection.Select(g => {
var sect_code = g.Contract.Station.Sector.SECT_CODE;
var sector = sectors.FirstOrDefault(s => s.SECT_CODE.Equals(sect_code));
var firstName = sector != null ?
(sector.USER != null ? sector.USER.USER_FIRSTNAME: "") :
"";
var lastName = sector != null ?
(sector.USER != null ? sector.USER.LASTNAME : "") :
"";
return new ReportLine
{
cds = string.Format("{0} {1}", firstName, lastName)
};
});
试试这个:
myCollection.Select(g => {
var sect_code = g.Contract.Station.Sector.SECT_CODE;
var sector = sectors.FirstOrDefault(s => s.SECT_CODE.Equals(sect_code));
var firstName = sector != null ?
(sector.USER != null ? sector.USER.USER_FIRSTNAME: "") :
"";
var lastName = sector != null ?
(sector.USER != null ? sector.USER.LASTNAME : "") :
"";
return new ReportLine
{
cds = string.Format("{0} {1}", firstName, lastName)
};
});
试试这个:
myCollection.Select(g => {
var sect_code = g.Contract.Station.Sector.SECT_CODE;
var sector = sectors.FirstOrDefault(s => s.SECT_CODE.Equals(sect_code));
var firstName = sector != null ?
(sector.USER != null ? sector.USER.USER_FIRSTNAME: "") :
"";
var lastName = sector != null ?
(sector.USER != null ? sector.USER.LASTNAME : "") :
"";
return new ReportLine
{
cds = string.Format("{0} {1}", firstName, lastName)
};
});
这应该是您正在寻找的:
myCollection.Select(g => new ReportLine
{
cds = (from s in sectors
where s.SECT_CODE.Equals(g.Contract.Station.Sector.SECT_CODE) && s.USER != null
select string.Format("{0} {1}", s.USER.USER_FIRSTNAME, s.USER.USER_LASTNAME)).FirstOrDefault() ?? " "
});
这应该是您正在寻找的:
myCollection.Select(g => new ReportLine
{
cds = (from s in sectors
where s.SECT_CODE.Equals(g.Contract.Station.Sector.SECT_CODE) && s.USER != null
select string.Format("{0} {1}", s.USER.USER_FIRSTNAME, s.USER.USER_LASTNAME)).FirstOrDefault() ?? " "
});
这应该是您正在寻找的:
myCollection.Select(g => new ReportLine
{
cds = (from s in sectors
where s.SECT_CODE.Equals(g.Contract.Station.Sector.SECT_CODE) && s.USER != null
select string.Format("{0} {1}", s.USER.USER_FIRSTNAME, s.USER.USER_LASTNAME)).FirstOrDefault() ?? " "
});
这应该是您正在寻找的:
myCollection.Select(g => new ReportLine
{
cds = (from s in sectors
where s.SECT_CODE.Equals(g.Contract.Station.Sector.SECT_CODE) && s.USER != null
select string.Format("{0} {1}", s.USER.USER_FIRSTNAME, s.USER.USER_LASTNAME)).FirstOrDefault() ?? " "
});
如果进行此更改,EF将无法解析代码以将其转换为SQL。是否指定这是SQL调用?问题标记为EF。即使使用EF,也不一定与SQL交互。但表达式确实需要可解析,这是不允许的。如果进行此更改,EF将无法解析代码以将其转换为SQL。是否指定这是SQL调用?问题标记为EF。即使使用EF,也不一定与SQL交互。但表达式确实需要可解析,这是不允许的。如果进行此更改,EF将无法解析代码以将其转换为SQL。是否指定这是SQL调用?问题标记为EF。即使使用EF,也不一定与SQL交互。但表达式确实需要可解析,这是不允许的。如果进行此更改,EF将无法解析代码以将其转换为SQL。是否指定这是SQL调用?问题标记为EF。即使使用EF,也不一定与SQL交互。但表达式确实需要可解析,这是不允许的。很确定EF不能正确地翻译它。@Servy,为什么不呢?这就是标准林克?你的意思是因为它无法查找
合同
然后站点
和扇区
?如果你问我这不是上面的linq,而是EF,如果使用的话,他在表达式中有一个真正的嵌套结构。很确定EF不能正确地翻译它。@Servy,为什么不呢?这就是标准林克?你的意思是因为它无法查找合同
然后站点
和扇区
?如果你问我这不是上面的linq,而是EF,如果使用的话,他在表达式中有一个真正的嵌套结构。很确定EF不能正确地翻译它。@Servy,为什么不呢?这就是标准林克?你的意思是因为它无法查找合同
然后站点
和扇区
?如果你问我这不是上面的linq,而是EF,如果使用的话,他在表达式中有一个真正的嵌套结构。很确定EF不能正确地翻译它。@Servy,为什么不呢?这就是标准林克?你的意思是因为它无法查找合同
然后站点
和扇区
?如果你问我,问题不在上面的linq,而是EF,如果使用的话,他在表达式中有一个真正的嵌套结构。什么是长手linq?我认为使用流利的语法没有问题。请参阅答案中的链接以获取示例。这是一种更加冗长、类似SQL的方式来编写相同的表达式。我知道常规linq语法是什么,还有let子句,我只是认为您在编写long hand linq时有其他意思,因为我以前从未听说过它。但你为什么认为他必须改变这种语法?什么是long hand LINQ?我认为使用流利的语法没有问题。请参阅答案中的链接以获取示例。这是一种更加冗长、类似SQL的方式来编写