【发布时间】:2017-05-02 03:56:37
【问题描述】:
我正在学习文档数据库,我们在 Visual Studio 中使用 Marten/Linq。数据库通过 Postgres/PGAdmin 运行。我的数据库是足球(不是美国)联赛、球队、球员和经理。我正在尝试基于多个参数构建查询。我有很好的奇异参数。
List<Player> englishPlayers = finalDb.Query<Player>().Where(x => x.Nationality.Contains("English")).ToList();
此查询将在文档数据库中创建国籍设置为“英语”的所有玩家的列表。
玩家是我的班级/桌子,带有国籍“字段”。我想做的是基于多个参数的查询。例如,我有多个“字段”,它们是 int 或 bool。举个例子,如果我想创建一个查询来显示某个国籍且lifetimeGoals > 100 的所有玩家,我将如何实现呢?
我在 Google 上搜索了大约一个小时,并通读了建议的类似问题,但其中大多数问题并未说明使用 Marten。
我尝试过先将其分解为单个查询,然后将它们组合起来,例如:
Player m4 = finalDb.Query<Player>().SelectMany(e => e.lifetimeGoals
.Where(p => e.lifetimeGoals >= 0));
但是,这会引发错误说明
int 不包含 where 的定义,也没有扩展方法 'Where' 接受'int' 类型的第一个参数。
我的术语有点不对劲,但希望这足够清楚,可以找到指导。
播放器类:
class Player
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string Team { get; set; }
public string prefPosition { get; set; }
public string Nationality { get; set; }
public int yearsAtCurrentClub { get; set; }
public int lifetimeGoals { get; set; }
public int domesticTitles { get; set; }
public int europeanTitles { get; set; }
}//Class Player
主类
static void Main(string[] args)
{
string connectionString = ConfigurationManager.ConnectionStrings
["FinalProjectDB"].ConnectionString;
IDocumentStore store = DocumentStore.For(connectionString);
using (var finalDb = store.OpenSession())
{
Player m4 = finalDb.Query<Player>().SelectMany(p => p.lifetimeGoals)
.Where(p => p.lifetimeGoals >= 0 && p.myString.Equals("valueToCheck"));
Console.ReadLine();
}
【问题讨论】:
标签: c# visual-studio linq document-database