Sco*_*ott 5 c# linq many-to-many entity-framework
所以我正在写一个"动态"的Linq查询.我创建了一个"选项"类,它包含可以作为查询一部分的所有动态选项.其中一些选项属性是List对象,它包含我想要返回的实体的ID,这些实体是SQL Server中多对多关系的一部分.一个快速的代码示例和表的描述可能会有所帮助(为了简洁起见,严重减少).
Table Cars: Id int PK,Model varchar(50),Year int
表颜色: Id int PK,名称varchar(50)
表CarsXColors: CarId int PK,ColorId int PK
public IEnumerable<Car> Search(SearchOptions options)
{
var query = from car in ctx.Cars select car;
// This works just fine
if (options.MaxMileage.HasValue) query = query.Where(x => x.Mileage <= options.Mileage.Value);
// How do I implement this pseudo code. options.Colors is a List<int>
if (options.Colors.Count > 0)
{
query = query.Where( -- select cars that are in the List<int> of colors --);
}
return query;
}
Run Code Online (Sandbox Code Playgroud)
我看到你已经得到了答案,但也要考虑这个替代方案:
var query =
from car in ctx.Cars
where options.Colors.Count <= 0 || car.CarsXColors.Any(y => options.Colors.Contains(y.Id))
select car;
Run Code Online (Sandbox Code Playgroud)
这种风格很常见,因为它始终生成相同的 SQL 语句,以便数据库引擎或 LINQ 实际上可以缓存查询和/或查询计划以实现更快的响应。
如果 options.Colors 为空,数据库查询优化器将自动消除 WHERE 子句,因此您无需为此付出任何性能损失。
| 归档时间: |
|
| 查看次数: |
522 次 |
| 最近记录: |