создание динамических запросов linQ

Я видел несколько старых сообщений, но не могу понять, как этого добиться, пожалуйста, помогите с примером.

Мне нужно создать метод фильтра для получения данных на основе пользовательских данных в форме, которые могут быть случайными по своей природе. Мой текущий код приведен ниже, который я чувствовал утомленным и неполным. Как я могу заменить это динамическими запросами LINQ, поскольку в будущем мне может потребоваться добавить дополнительные параметры. Я не мог понять, что такое деревья выражений. Пожалуйста, кто-нибудь, просветите меня.

 public Status GetAssets(String AssetNumber, int AssetCategoryId)
    {
        var status = Status.ReportInfo("Data Retrieval initiated");

        var assetsRepo = new EFRepository<DAL.Entities.Assets, long>(new ProductionControlDataContextFactory(DataBase));
        try
        {
            if (AssetNumber == "" && AssetCategoryId == 0)
            {
                status = Status.ReportWarning("Invalid Entry.");
            }
            else if (AssetNumber == "")
            {
                var assetsData = assetsRepo.FindAll(x => x.AssetCategoryId == AssetCategoryId, x => x.AssetCategory).ToList();
                status = Status.ReportSuccess("Data Retrieved Successfully.");
                status.Data = assetsData;
            }
            else if (AssetCategoryId == 0)
            {
                var assetsData = assetsRepo.FindAll(x => x.AssetNumber == AssetNumber, x => x.AssetCategory).ToList();
                status = Status.ReportSuccess("Data Retrieved Successfully.");
                status.Data = assetsData;
            }
            else
            {
                var assetsData = assetsRepo.FindAll(x => x.AssetNumber == AssetNumber && x.AssetCategoryId == AssetCategoryId, x => x.AssetCategory).ToList();
                status = Status.ReportSuccess("Data Retrieved Successfully.");
                status.Data = assetsData;
            }


        }
        catch (Exception ex)
        {
            return Status.ReportError("Couldn't Retrieve Data.");
        }

        return status;

это мой класс сущности

public class Assets : ProductionControlEntity<long>
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public override long Id { get; set; }

    [ForeignKey("AssetCategory")]
    public int? AssetCategoryId { get; set; }
    public virtual AssetCategory AssetCategory { get; set; }

    [Index("IX_AssetNumber", 1, IsUnique = true)]
    [StringLength(150)]
    public string AssetNumber { get; set; }

    public string AssetDescription { get; set; }

    public string ManufacturerModelNumber { get; set; }

    public Boolean CalibrationRequired { get; set; }

    public DateTime? LastCalibrationDate { get; set; }

    public DateTime? NextCalibrationDueDate { get; set; }

    public Boolean AssetStatus { get; set; }

    public Boolean IsDeleted { get; set; }

    public DateTime LastModified { get; set; }

    public string uuid { get; set; }

    //public ICollection<EquipmentEntries> EquipmentEntries { get; set; }


}

Любая помощь приветствуется. Спасибо заранее..


person Kiran Sankar    schedule 04.05.2018    source источник
comment
если вы проголосовали против, пожалуйста, проверьте обновленный ответ, я пропустил не запрос в ответе раньше   -  person Deep Shah    schedule 04.05.2018


Ответы (1)


Попробуй это:

 if (string.isNullOrEmpty(AssetNumber) && AssetCategoryId == 0) {
            status = Status.ReportWarning("Invalid Entry.");
        }
        else {
            var assetsData = assetsRepo.FindAll(x => ((!string.isNullOrEmpty(AssetNumber) && AssetCategoryId != 0 && x.AssetCategoryId == AssetCategoryId && x.AssetNumber == AssetNumber)
                || (string.isNullOrEmpty(AssetNumber) && AssetCategoryId != 0 && x.AssetCategoryId == AssetCategoryId)
                || (!string.isNullOrEmpty(AssetNumber) && AssetCategoryId == 0 && x.AssetNumber == AssetNumber)), x => x.AssetCategory).ToList();
            status = Status.ReportSuccess("Data Retrieved Successfully.");
            status.Data = assetsData;
        }

Дайте мне знать, если есть вопросы, СЧАСТЛИВОГО КОДИРОВАНИЯ !!!

person Deep Shah    schedule 04.05.2018
comment
Отредактировал ответ, проверьте еще раз, спасибо - person Deep Shah; 04.05.2018