我有两个表及其各自的POCO类:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public List<int> CarIds { get; set; }
}
public class Car
{
public int Id { get; set; }
public string Brand { get; set; }
public string Model { get; set; }
public int Year { get; set;}
}
我有一个DTO作为
public class PersonDTO
{
public int Id { get; set; }
public string Name { get; set; }
public List<Car> Cars { get; set; }
}
一个人可能有没有或很多汽车。
如何编写LinQ查询以从PersonDTO
(人员)和List<Person>
(汽车)创建List<Car>
?
我已经开始了
var q = (from p in Persons
from c in Cars.Where(x => p.CarIds.Contains(x.Id))
select new PersonDTO
{
Id = p.Id,
Name = p.Name,
Cars = c
}).ToList();
但是我收到以下错误:
表达式树可能不包含使用的调用或调用 可选参数。
我该如何撰写此查询?
我认为提供有关此问题的进一步信息是非常必要的,因为我可能会误导其他成员。
实际上我使用MongoDB作为数据源,我的实际代码如下:
IMongoCollection<Person> persons = db.GetCollection<Person>("person");
IMongoCollection<Car> cars = db.GetCollection<Car>("car");
var model = (from p in persons.AsQueryable<Person>()
from c in cars.AsQueryable<Car>().Where(x => p.CarIds.Contains(x.Id))
select new PersonDTO
{
Id = p.Id,
Name = p.Name,
Cars = c
}).ToList();
我也试过
var model = (from p in persons.AsQueryable<Person>()
select new PersonDTO
{
Id = p.Id,
Name = p.Name,
Cars = cars.AsQueryable<Person>().Where(x => b.CarIds.Contains(x.Id))
}).ToList();
但我仍然得到同样的错误。
关于我不使用RDBMS汽车的关系,并不仅仅属于一个人,因为它在日常生活中。汽车就像一个标签。我认为将其视为StackOverfow中的标签会更好。每个标记都是唯一的,每个标记都有零个,一个或多个标记,许多帖子可能在您的帖子中具有相同的标记。当我显示我的帖子时,我得到了我输入的标签。我想要的是这种关系。
我希望这更有意义。
答案 0 :(得分:0)
更新 我在Linqpad尝试了这个,这是有效的。
void Main()
{
var Persons = new List<Person>() { new Person { CarIds = new List<int> { 1, 2, 3 } }, new Person { CarIds = new List<int> { 4, 5 } } };
var Cars = new List<Car>() { new Car { Id = 1 }, new Car { Id = 2 }, new Car { Id = 3 }, new Car { Id = 4 }, new Car { Id = 5 } };
(from p in Persons
select new PersonDTO
{
Id = p.Id,
Name = p.Name,
Cars = Cars.Where(x => p.CarIds.Contains(x.Id)).ToList()
}).ToList().Dump();
}
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public List<int> CarIds { get; set; }
}
public class Car
{
public int Id { get; set; }
public string Brand { get; set; }
public string Model { get; set; }
public int Year { get; set; }
}
public class PersonDTO
{
public int Id { get; set; }
public string Name { get; set; }
public List<Car> Cars { get; set; }
}
您的数据来源是什么?数据库?