Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.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/2/tensorflow/5.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-Lambda改进_C#_Entity Framework_Linq_Lambda - Fatal编程技术网

C# LINQ-Lambda改进

C# LINQ-Lambda改进,c#,entity-framework,linq,lambda,C#,Entity Framework,Linq,Lambda,我有这样一句话: var lstOfIds = db.TBL_AssocIncidentSpecialCat .Where(x => x.IncidentId == incidentVm.ID) .Select(t => t.SpecialCategoriesId) .ToList(); 这一行为我收集了SpecialCategoriesIds的列表。那么我必须这样做: incident

我有这样一句话:

var lstOfIds = db.TBL_AssocIncidentSpecialCat
                .Where(x => x.IncidentId == incidentVm.ID)
                .Select(t => t.SpecialCategoriesId)
                .ToList();
这一行为我收集了
SpecialCategoriesId
s的列表。那么我必须这样做:

incidentVm.LstSpecialCategories = db.TBL_SpecialCategories
                                    .Where(x => lstOfIds.Contains(x.Id))
                                    .Select(t => t.SpecialCategory)
                                    .ToList();
有没有办法把这两条线合并成一条?即使只有两行代码。。我觉得先抓取Id,然后根据Id抓取相关属性只是额外的一步,可以缩短为一行。但我可能错了

感谢您的帮助

更新

incidentVm.LstSpecialCategories = db.TBL_AssocIncidentSpecialCat
                                    .Where(x => x.IncidentId == incidentVm.ID)
                                    .Join(
                                        db.TBL_SpecialCategories, 
                                        x => new{Id = x.SpecialCategoriesId},
                                        t => new{Id = t.Id},
                                        (x,t) => {return t.SpecialCategory}
                                    );
我在
Join
中的最后一部分下面变红了:

具有语句体的lambda表达式无法转换为表达式树


您可以使用
Join
组合这两行。大概

var result = db.TBL_AssocIncidentSpecialCat
                .Join(
                    db.TBL_SpecialCategories,
                    ais => new { Id = ais.IncidentId },
                    sc => new { Id = sc.Id },
                    (ais, sc) => { return sc; }
                )
                .ToList();
为了这个

使用Where子句更新:您应该在
加入
之后使用
Where
条件

var result = db.TBL_AssocIncidentSpecialCat
                .Join(
                    db.TBL_SpecialCategories,
                    ais => new { Id = ais.IncidentId },
                    sc => new { Id = sc.Id },
                    (ais, sc) => new { ais = ais, sc = sc }
                )
                .Where(x => x.ais.IncidentId == 1)
                .Select(y => y.sc)
                .ToList();

您可以尝试LINQ查询样式的联接:

incidentVm.LstSpecialCategories = (from aispc in db.TBL_AssocIncidentSpecialCat
                                    join spc in db.TBL_SpecialCategories
                                    on aispc.SpecialCategoriesId equals lspc.Id
                                    where aispc.IncidentId == incidentVm.ID
                                    select lspc.SpecialCategory).ToList();

在一些答案的帮助下,我能够弄明白这一点,并且我自己进行了测试。以下是我的解决方案:

incidentVm.LstSpecialCategories = db.TBL_AssocIncidentSpecialCat
                                    .Where(t => t.IncidentId == incidentVm.ID)
                                    .Join(db.TBL_SpecialCategories,
                                        ik => ik.SpecialCategoriesId,
                                        ok => ok.Id,
                                        (ik, ok) => ok.SpecialCategory
                                    )
                                    .ToList();

感谢您的帮助。

这是实体框架。对不起,我会添加到标签中。这些类型是Entity FrameworkSee中的域类型,关于如何使用EFI进行连接,您可以始终使用id为的
join()
。@Kwinten无论如何,您可以提供一个示例。我目前正在做这件事well@mjwills好的,现在我在
Join
下面看到了红色的蠕动。。无法从用法推断类型参数。尝试指定类型参数explicitly@M12Bennett我已经更新了答案。
Where
子句应位于
Join
之后。