Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.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_Entity Framework - Fatal编程技术网

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的方式来编写