使用下拉列表中的值进行 LINQ 查询以与数据进行比较

LINQ query with value from dropdown to compare with data

我的查询如下。有人可以帮我如何在我的 Linq 语句中添加 dbquery 吗?有评论"Add Where here"。我从昨天开始就在挣扎。思路是形成一个LINQ语句,一下子拿到列表。谢谢。

String dbwhere = "";
if (ddlName.SelectedItem.Value != "")
{
    dbwhere = " && (User.Name == '" + ddlName.SelectedItem.Value.TrimEnd() + "')";
}
if (ddlHeightFrom.SelectedItem.Value != "")
{
    dbwhere = dbwhere + " && (Physical.Height >= '" + ddlHeightFrom.SelectedItem.Value.TrimEnd() + "')";
}
if (ddlHeightTo.SelectedItem.Value != "")
{
    dbwhere = dbwhere + " && (Physical.Height <= '" + ddlHeightTo.SelectedItem.Value.TrimEnd() + ")";
}

var usersquery = (
  from physical in dbContext.Physicals
  join user in dbContext.User on physical.UserID equals user.UserID
  join photos in dbContext.Photo on User.UserID equals photos.UserID
  where photos.PhotoNum == 1 && photos.Status == true
  // =======  Add dbwhere here ============
  select new
  {
     photos.PhotoURL,
     photos.PhotoDescription,
     user.State,
     user.Country,
     physical.EyesColor,
     physical.HairColorInfo,
     physical.HairTypeInfo,
     physical.BodyHeight,
     physical.BodyWeight,
  }).ToList();

您可以重写您的查询以避免将 linq 与 SQL 混合(并使其免受 SQL 注入)

var usersquery = (
    from physical in dbContext.Physicals
    join user in dbContext.User on physical.UserID equals user.UserID
    join photos in dbContext.Photo on User.UserID equals photos.UserID
    where photos.PhotoNum == 1 && photos.Status == true
    select new
    {
        physical,
        user,
        photos,
    }; // do not put ToList here!

现在您可以添加您的特殊支票:

if (ddlName.SelectedItem.Value != "")
{
  var userName = ddlName.SelectedItem.Value.TrimEnd();
  usersquery = usersquery.Where(x => x.user.Name == userName);
}

if (ddlHeightFrom.SelectedItem.Value != "")
{
  var height = int.Parse(ddlHeightFrom.SelectedItem.Value.TrimEnd());
  usersquery = usersquery.Where(x => x.physical.Height >= height);
}

// and so on

现在您可以使用 ToList

实现您的数据
var result = usersquery.Select(x => new 
  {
    x.photos.PhotoURL,
    x.photos.PhotoDescription,
    x.user.State,
    x.user.Country,
    x.physical.EyesColor,
    x.physical.HairColorInfo,
    x.physical.HairTypeInfo,
    x.physical.BodyHeight,
    x.physical.BodyWeight
  }).ToList();

注意:我是用记事本写的,所以可能会有错误。不过我希望思路清晰