EF Core 2 - 仅请求两列

时间:2018-01-11 16:49:57

标签: entity-framework-core

我试图为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;
            }
        }
    }

2 个答案:

答案 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 *

相关问题