【问题标题】:Lambda expressions from sql来自 sql 的 Lambda 表达式
【发布时间】:2013-08-18 08:12:16
【问题描述】:

我正在尝试在 lambda 中执行此操作:

Select Hint from [tablename] where Answer = 'answer';

这是我迄今为止尝试过的:

    public ModelSQL.puzzlecontent GetAcrossClue(string answer)
    {

        return context.puzzlecontents.Where(c => c.Answer.Equals(answer)).Select( g => new {g.Hint});
    }

错误说:

不能隐式转换类型 'System.Linq.IQueryable' 到 'iStellar.ModelSQL.puzzlecontent'。存在显式转换(是 你错过了一个演员?)

【问题讨论】:

  • 什么是ModelSQL.puzzlecontent?这种类型应该明确。
  • ModelSQL 是我所有 CRUD 类文件所在的文件夹名称,puzzlecontent 是我正在使用的 CRUD 类文件的名称
  • 哦,我忽略了puzzlecontents
  • 通过使用新的new {g.Hint},您将返回匿名类型的 IEnumerable(g.Hint 是什么类型),这与方法的返回类型的签名不匹配(@ 987654325@)。您必须选择 ModelSQL.puzzlecontent 类型的内容并在结果上使用 First/Single(OrDefault) 以匹配方法的签名。

标签: c# asp.net sql linq lambda


【解决方案1】:

您的问题是 Select 返回一个集合,而您的方法返回一个实例。

假设g.HintModelSQL.puzzlecontent 实例,则应在末尾添加FirstOrDefault 以检索单个项目。

我错过的事情是您试图通过 new { g.Hint } 返回一个匿名类型,这是无效的。你需要返回一个具体的类型。

再次假设 g.HintModelSQL.puzzlecontent 实例,您应该有

return context.puzzlecontents
    .Where(c => c.Answer.Equals(answer))
    .Select(g => g.Hint)
    .FirstOrDefault();

【讨论】:

  • 我在末尾添加了 FirstOrDefault() 。它说不能将类型'AnonymousType#1'隐式转换为'iStellar.ModelSQL.puzzlecontent'
  • 很抱歉,具体类型是什么?
  • @user2376998 您可能还没有将g => new {g.Hint} 更改为g => g.Hint
  • @ClaudioRedi 我认为OP想要获得answerHint,因此您应该将返回值更正为string而不是ModelSQL.puzzlecontent。否则,我们必须在 Where 之后添加 FirstOrDefault(),而没有任何 Select
  • @user2376998 但您的方法返回ModelSQL.puzzlecontent?如果您的Hint 是字符串,则该方法应返回string
【解决方案2】:
public var GetAcrossClue(string answer)
{

    return context.puzzlecontents.Where(c => c.Answer.Equals(answer)).Select( g => new {g.Hint});
}

忽略这部分,谢谢克劳迪奥。来晚了还能说什么?

public ModelSQL.puzzlecontent GetAcrossClue(string answer)
{

    return context.puzzlecontents.Where(c => c.Answer.Equals(answer)).Select( g => new puzzlecontent{property1 = value,property2 = etc});
} 

虽然这部分会起作用 ^

【讨论】:

  • 恐怕回不来var。那甚至不会编译。
猜你喜欢
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多