【问题标题】:LINQ in Windows 8.1 Universal AppsWindows 8.1 通用应用程序中的 LINQ
【发布时间】:2015-01-09 08:52:29
【问题描述】:

我正在使用 Windows 8.1 通用应用程序,并且我将我的共享代码放在共享项目中。

我有一个 ViewModel,它需要调用 LINQ 方法来将属性重置为列表中的第一项,这里是代码。

public ObservableCollection<Movie> Movies { get; set; }
public Movie Current { get; set; }

...

public void Reset()
{
   this.Current = this.Movies.FirstOrDefault();
}

但是,似乎 LINQ 在共享项目中不可用,我无法添加引用。

但是,我可以在 Windows 8.1 和 Windows Phone 8.1 项目中使用 LINQ,因此我可以在每个项目中创建一个类并从我的 ViewModel 继承并为每个项目单独实现它。但这对于我想要实现的目标来说似乎有点过头了。

谁能救我?

【问题讨论】:

标签: c# wpf linq win-universal-app


【解决方案1】:

如果我理解正确并且您想重置 current 以指向/引用 Movies 集合中的第一个元素,请使用:

this.current = this.Movies.Item[0];

见:Collection.Item Property

【讨论】:

  • this.Movies[0] 确实有效,但是在列表为空的情况下我需要执行一些错误处理。 FirstOrDefault() 更方便。我确定我会在其他地方需要 LINQ,但它在 Shared 项目内的类中不可用。
  • @MikeEason,您可以随时检查 Movies colection 是否为空,对吗?目前我认为,您不需要 Linq。
  • this.Current = null; if (this.Movies != null) if (this.Movies.Count &gt; 0) this.Current = this.Movies[0]; 这可能是最好的方法,但是将来我将需要 LINQ 选择查询。当前的示例只是问题的一半。
  • @MikeEason,因此,您需要编写类,以便能够从 IEnumerable 转换为 Movie 类。干杯,Maciej
【解决方案2】:

我会那样做。由于您不能将 Linq 包含到共享库中,因此您可以创建一个使用该类并传递该类的类

Class MovieViewModel
{
    private IEnumerable<Movie> _movie;

    // your sorting logic here
    this.Current = this.Movies.FirstOrDefault();
}

或者创建一个静态扩展方法,您可以将集合传递给该方法并对其进行排序。这样你就可以用任何视图模型调用它

【讨论】:

    猜你喜欢
    • 2014-09-17
    • 1970-01-01
    • 2014-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多