我试图为EF Core 2编写一个只请求SQL返回两列的LINQ语句:UserID和FirstNamePreferred。
我尝试的所有内容都会创建一个请求所有列的SQL语句。
这是我的代码:
var model = db.FamilyMember
.Where(fm => fm.UserID == message.CurrentUserID)
.Select(fm => new Model
{
UserID = message.CurrentUserID,
FirstNamePreferred = fm.FirstNamePreferred
})
.AsNoTracking()
.FirstOrDefault();
我的观点模型:
public class Model
{
public string UserID { get; set; }
public string FirstNamePreferred { get; set; }
}
这将通过Profiler生成以下SQL:
exec sp_executesql N'SELECT TOP(1) [fm].[ID], [fm].[DOB], [fm].[DOD], [fm].[EyeColourID], [fm].[FamilyID], [fm].[FirstName], [fm].[FirstNameKnownAs], [fm].[Gender], [fm].[HairColour], [fm].[IdentifiesAs], [fm].[LastName], [fm].[MiddleNames], [fm].[NickName], [fm].[PictureExt], [fm].[PictureUID], [fm].[PrimaryEmailAddress], [fm].[SkinTone], [fm].[UserID]
FROM [FamilyMember] AS [fm]
WHERE [fm].[UserID] = @__message_CurrentUserID_0',N'@__message_CurrentUserID_0 nvarchar(450)',@__message_CurrentUserID_0=N'b0e1fe4c-f218-4903-8117-465a68cd99fc'
更新:问题是FirstNamePreferred实际上不是数据库字段。对不起,我没有在代码中向下钻取,新手错误。
public string FirstNamePreferred
{
get
{
if (FirstNameKnownAs == null)
{
return FirstName;
}
else
{
return FirstNameKnownAs;
}
}
}
答案 0 :(得分:0)
更新:问题是FirstNamePreferred实际上不是数据库字段。对不起,我没有在代码中向下钻取,菜鸟错误。
public string FirstNamePreferred
{
get
{
if (FirstNameKnownAs == null)
{
return FirstName;
}
else
{
return FirstNameKnownAs;
}
}
}
答案 1 :(得分:-1)
这将有效:
var model = db.FamilyMember
.Where(fm => fm.UserID == message.CurrentUserID)
.Select(fm => new
{
UserID = message.CurrentUserID,
FirstNamePreferred = fm.FirstNamePreferred
})
.AsNoTracking()
.FirstOrDefault();
使用不属于DbContext的DTO将导致SELECT *