Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.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# 将查询语法转换为Lambda表达式_C#_Linq - Fatal编程技术网

C# 将查询语法转换为Lambda表达式

C# 将查询语法转换为Lambda表达式,c#,linq,C#,Linq,我需要将以下查询语法转换为lambda表达式。 我正在尝试这样做,但不知道如何在lambda表达式中使用let子句 List<ClInd> clIndls = (from clIndls in Connection.ClIndls join indls in Connection.Indls on clIndls.IndID equals indls.ID

我需要将以下查询语法转换为lambda表达式。 我正在尝试这样做,但不知道如何在lambda表达式中使用let子句

 List<ClInd> clIndls =
                   (from clIndls in Connection.ClIndls
                    join indls in Connection.Indls
                    on clIndls.IndID equals indls.ID
                    where pins.Contains(indls.PIN.Value)
                    let clIndal = clIndls.ClIndalAddes.OrderByDescending(y => y.UpdatedDate).FirstOrDefault(x => x.ClIndID == clIndls.ID)
                    select new ClInd
                    {
                        ID = clIndls.ID,
                        MailingAddress = new LiableIndlAddress(){
                          City = clIndal.Address.City,
                        }
                    }).Distinct().ToList();
List clIndls=
(来自Connection.clIndls中的clIndls
在Connection.indls中加入indls
在clIndls.IndID上等于indls.ID
其中pins.Contains(indls.PIN.Value)
设clIndal=clIndls.ClIndalAddes.OrderByDescending(y=>y.updateDate).FirstOrDefault(x=>x.ClIndID==clIndls.ID)
选择新的ClInd
{
ID=clIndls.ID,
MailingAddress=new LiableIndlAddress(){
City=clIndal.Address.City,
}
}).Distinct().ToList();
我的做法:

            List<ClaimLiableIndividual> claimLiableIndividuals = Connection.ClIndls.Join(Connection.Indls,
                clIndls => clIndls.IndID,
                indls => indls.ID,
                (clmIndividuals, individuals) => new { ClmIndividuals = clmIndividuals, Individuals = individuals }).Where(x => pins.Contains(indls.PIN.Value))
List claimlibleIndividuals=Connection.ClIndls.Join(Connection.Indls,
clIndls=>clIndls.IndID,
indls=>indls.ID,
(clmIndividuals,personals)=>new{clmIndividuals=clmIndividuals,personals=personals})。其中(x=>pins.Contains(indls.PIN.Value))

如果您在这方面有任何帮助,我们将不胜感激。

老实说,如果涉及到
Join
,我会避免使用方法语法,如果您已经有了工作代码,我不喜欢方法语法中的Join。然而

方法语法中没有
let
,您需要将结果放入匿名类型(或其他类型)的属性中。但在这里,您不需要它:

List<ClaimLiableIndividual> claimLiableIndividuals =
    Connection.ClIndls.Join(
        Connection.Indls,
        clIndls => clIndls.IndID,
        indls   => indls.ID,
        (clmIndividuals, individuals) => new 
        { 
            ClmIndividuals = clmIndividuals, 
            Individuals = individuals 
        }
    )
    .Where(x => pins.Contains(x.Individuals.PIN.Value))
    .Select(x => new ClInd
    {
        ID = x.ClmIndividuals.ID,
        MailingAddress = new LiableIndlAddress
        { 
            City = x.ClmIndividuals.ClIndalAddes
                .OrderByDescending(a => a.UpdatedDate)
                .FirstOrDefault(a => a.ClIndID == x.ClmIndividuals.ID)?.Address.City
        }
    })
    .Distinct()
    .ToList();
列出可索赔的个人=
Connection.ClIndls.Join(
连接。Indls,
clIndls=>clIndls.IndID,
indls=>indls.ID,
(公民、个人)=>新
{ 
ClmIndividuals=ClmIndividuals,
个人=个人
}
)
.Where(x=>pins.Contains(x.personals.PIN.Value))
.选择(x=>newclind
{
ID=x.ClmIndividuals.ID,
MailingAddress=新的责任地址
{ 
城市=x.ClmIndividuals.clindalades
.OrderByDescending(a=>a.UpdateDate)
.FirstOrDefault(a=>a.ClIndID==x.ClmIndividuals.ID)?.Address.City
}
})
.Distinct()
.ToList();

请注意,如果您在
ClInd
中重写
Equals
GetHashCode
转换为
,则
Distinct
仅起作用。选择
调用,但您确实不应该执行此转换,因为您现在拥有的代码的可读性远远高于转换时的结果翻译。我需要为这个方法编写单元测试,我使用Moq.Expression,我面临着为查询语法编写单元测试的困难,所以我将它转换为lamda表达式,这样我就可以编写毫无意义的单元测试了。这两个语法具有相同的语义,产生了完全相同类型的表达式,具有完全相同的含义。仅供参考,它被称为方法语法谢谢Tim,是的,这是我要找的,它是一个旧代码,所以正在尝试重构it@sajeshNambiar,它不是重构,而是破坏可读性。安装整形器它可以为您在一次点击。