【发布时间】:2016-01-01 23:31:59
【问题描述】:
我在尝试让 LINQ 语句正常工作时遇到了麻烦。
我在这篇文章之后尝试使用 SQL 语法和 lambda:
C# Joins/Where with Linq and Lambda
这是我的工作 SQL 的样子:
SELECT ws_lookup_OccupationGroup.Code
FROM ws_lookup_OccupationGroup
INNER JOIN ws_lookup_Occupation ON
ws_lookup_OccupationGroup.Code = ws_lookup_Occupation.ws_lookup_OccupationGroup_Code
WHERE (ws_lookup_Occupation.Code = N'413')
这是我的第一次尝试,它没有产生任何结果:
var query = from occupationGroup in db.ws_lookup_OccupationGroups
join occupations in db.ws_lookup_Occupations on occupationGroup.Code equals occupations.Code
where occupations.Code == model.Client.Client_Details_Enhanced.Occupation.Code
select new
{
OccupationGroup = occupationGroup,
Occupations = occupations
};
这是我使用 Lamdba 的第二次尝试,但也没有产生任何结果:
var queryLambda = db.ws_lookup_OccupationGroups
.Join(db.ws_lookup_Occupations,
occupation => occupation.Code,
occupationGroup => occupationGroup.Code,
(occupation, occupationGroup) => new
{
OCCUPATION = occupation,
OCCUPATIONGROUP = occupationGroup
})
.Where(all => all.OCCUPATION.Code == model.Client.Client_Details_Enhanced.Occupation.Code);
我只是看不到出了什么问题......
我不知道这是否有任何相关性,但我使用的是 Code First Entity Framework - 他是我的 OccupationGroups & Occupations 模型:
public class ws_lookup_OccupationGroup {
[Key]
[MaxLength(250)]
public string Code { get; set; }
[MaxLength(250)]
public string Name { get; set; }
public int SortOrder { get; set; }
public List<ws_lookup_Occupation> Occupations { get; set; }
}
public class ws_lookup_Occupation {
[Key]
[MaxLength(10)]
public string Code { get; set; }
[MaxLength(250)]
public string Name { get; set; }
[MaxLength(250)]
public string BarbadosMotorFactor { get; set; }
[MaxLength(250)]
public string TrinidadMotorFactor { get; set; }
[MaxLength(250)]
public string OtherRegionsMotorFactor { get; set; }
}
【问题讨论】:
-
您是否尝试过硬编码值为 413 而不是
model.Client.Client_Details_Enhanced.Occupation.Code的语句? -
刚刚尝试过 - 也没有产生任何结果:(
-
您的查询的两个版本看起来都正确。您是否分析过数据库以查看实际发出的 SQL 是什么?
-
LINQPad 对于调试这样的查询很有用,您可以像在 Management Studio 中一样快速编辑查询。
-
在 SQL 中,您加入
ws_lookup_Occupation.ws_lookup_OccupationGroup_Code,但在 Linq 中,您加入occupations.Code。但实际上你应该只使用navigation properties 而不是加入。