C# linq c中带参数的搜索查询
我需要在NetCore3.0中构建一个带有动态参数的搜索查询C# linq c中带参数的搜索查询,c#,linq,C#,Linq,我需要在NetCore3.0中构建一个带有动态参数的搜索查询 IQueryable<UserDto> query = from user in dbContext.DB_USER join items in dbContext.DB__ITEMS on user.IdItem equals items.IdItem join cars in dbContext.DB_CARS on user.IdCars equals cars.IdItem join statsCar in db
IQueryable<UserDto> query =
from user in dbContext.DB_USER
join items in dbContext.DB__ITEMS on user.IdItem equals items.IdItem
join cars in dbContext.DB_CARS on user.IdCars equals cars.IdItem
join statsCar in dbContext.DB_STATS_CARS on cars.IdCars equals statsCar.Id
select new UserDto
{
Id = user.Id,
Name = user.Name,
Data = user.Data.HasValue ? user.Data.Value.ToUnixTime() : default(long?),
Lvl = user.L,
Items = new ItemsUdo
{
Id = items.Id,
Type = items.Type,
Value = items.Value
},
Cars = new CarsDto
{
Id = cars.Id,
Model = cars.model,
Color = cars.Color
}
};
它对用户有效。数据无效,但是否正确?如何在linq查询中执行此操作?执行以下操作:
IQueryable<UserDto> query =
from user in dbContext.DB_USER
join items in dbContext.DB__ITEMS on user.IdItem equals items.IdItem
join cars in dbContext.DB_CARS on user.IdCars equals cars.IdItem
join statsCar in dbContext.DB_STATS_CARS on cars.IdCars equals statsCar.Id;
select new UserDto
{
Id = user.Id,
Name = user.Name,
Data = user.Data.HasValue ? user.Data.Value.ToUnixTime() : default(long?),
Lvl = user.L,
Items = new ItemsUdo
{
Id = items.Id,
Type = items.Type,
Value = items.Value
},
Cars = new CarsDto
{
Id = cars.Id,
Model = cars.model,
Color = cars.Color
}
};
if(!string.IsNullOrWhitespace(username))
query = query.Where(ud => ud.Name == username);
if(!string.IsNullOrWhitespace(itemtype))
query = query.Where(ud => ud.Items.Any(i => i.Type == itemtype));
if(!string.IsNullOrWhitespace(carmodel))
query = query.Where(ud => ud.Cars.Any(c => c.Model == carmodel));
等等。这些将像和一样工作;如果指定用户名和项目类型,则只会获得名为该用户名和项目类型的用户,并且该项目类型位于项目列表中的某个位置。。etc这样做:
IQueryable<UserDto> query =
from user in dbContext.DB_USER
join items in dbContext.DB__ITEMS on user.IdItem equals items.IdItem
join cars in dbContext.DB_CARS on user.IdCars equals cars.IdItem
join statsCar in dbContext.DB_STATS_CARS on cars.IdCars equals statsCar.Id;
select new UserDto
{
Id = user.Id,
Name = user.Name,
Data = user.Data.HasValue ? user.Data.Value.ToUnixTime() : default(long?),
Lvl = user.L,
Items = new ItemsUdo
{
Id = items.Id,
Type = items.Type,
Value = items.Value
},
Cars = new CarsDto
{
Id = cars.Id,
Model = cars.model,
Color = cars.Color
}
};
if(!string.IsNullOrWhitespace(username))
query = query.Where(ud => ud.Name == username);
if(!string.IsNullOrWhitespace(itemtype))
query = query.Where(ud => ud.Items.Any(i => i.Type == itemtype));
if(!string.IsNullOrWhitespace(carmodel))
query = query.Where(ud => ud.Cars.Any(c => c.Model == carmodel));
等等。这些将像和一样工作;如果指定用户名和项目类型,则只会获得名为该用户名和项目类型的用户,并且该项目类型位于项目列表中的某个位置。。etc这是一个LINQ查询。无论您使用查询语法还是扩展方法,您都在创建一个LINQ queryit works。。。但这是正确的吗听起来你回答了自己的问题。您可以根据用户输入动态链接任意多个.Where调用。这是一个LINQ查询。无论您使用查询语法还是扩展方法,您都在创建一个LINQ queryit works。。。但这是正确的吗听起来你回答了自己的问题。您可以根据用户输入动态链接任意多个.Where调用。