【问题标题】:what type for declare variable from LINQ从 LINQ 声明变量的类型
【发布时间】:2018-12-21 10:33:24
【问题描述】:

我不知道 LINQ 会产生什么变量。 我想为结果 LINQ 创建空变量。让我们看一下详细的例子

int Id = 1;
IEnumerable<object> permission = null;
if(Id != 0) {
    permission = from x in db.foo
                 join y in db.bar
                 on x.Id equal y.fkBar
                 select new {
                     Id = x.Id,
                     Name = y.Name }
    permission = permission.where(a => a.Name = "xxxx")
} else {
    permission = from x in db.foo
                 select new {
                     Id = x.Id,
                     Name = "" }
    permission = permission.where(a => a.Name = "yyyyy")
}
return permission;

where clause“对象”中的错误不包含“名称”的定义,并且找不到接受“对象”类型的第一个参数的可访问扩展方法“名称”

【问题讨论】:

  • 创建一个类,除非你不会使用object。
  • 也许你可以使用dynamic type,不过我不知道使用它是否是个好主意。
  • 你遇到过匿名类型。尽管它们很有用,但有时却没有。在您的用例中,您需要创建一个类并避免使用匿名类型。

标签: c# entity-framework linq


【解决方案1】:

我将创建一个以Id 和Name 作为属性的类,然后permission 将成为IEnumerable&lt;YourClassName&gt;。

int Id = 1;
IEnumerable<YourClassName> permission = null;
if(Id != 0) {
    permission = from x in db.foo
        join y in db.bar
        on x.Id equal y.fkBar
        select new YourClassName {
            Id = x.Id,
            Name = y.Name }
} else {
    permission = from x in db.foo
        select new YourClassName {
            Id = x.Id,
            Name = "" }
}

return permission;

IMO,类是在这种情况下的最佳选择,并且比仅使用 dynamic 或 object 类型更安全。

【讨论】:

  • 我不创建类名。我正在使用IEnumerable&lt;object&gt;。但不工作..
  • 错误: IEnumerable 是一种类型,在@Phil 的给定内容中无效。
  • 我已经编辑了我的答案给你一个例子,你能试试这样吗?
  • 谢谢..我之前说错误是因为我编码var permission = IEnumerable&lt;object&gt;。太愚蠢了。 @菲尔
  • 在这种情况下,您将缺少new 关键字,即var permission = new List&lt;object&gt;()。如果这有帮助,请将我的答案标记为正确的答案。
【解决方案2】:

不要使用var permission 声明,而是使用dynamic permission = null,它会起作用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多