如何在Where方法中加入标准?

时间:2017-09-12 01:42:53

标签: c# linq

我想询问搜索命令中的WHERE条件。我在搜索期间调用Web服务(API),我想将WHERE语句放在我的代码中,但是出现了错误。

    private async Task CallApi(string searchText = null)     
    {           
        long lastUpdatedTime = 0;                           
        long.TryParse(AppSettings.ComplaintLastUpdatedTick, out lastUpdatedTime);

        var currentTick = DateTime.UtcNow.Ticks;            
        var time = new TimeSpan(currentTick - lastUpdatedTime);


        if (time.TotalSeconds > 1)          {
            int staffFk = Convert.ToInt32(StaffId);
            var result = await mDataProvider.GetComplaintList(lastUpdatedTime, mCts.Token, staffFk);
            if (result.IsSuccess)
            {

                // Save last updated time
                AppSettings.ComplaintLastUpdatedTick = result.Data.Updated.ToString();

                // Store data into database
                if ((result.Data.Items != null) &&
                    (result.Data.Items.Count > 0))
                {

                    var datas = new List<Complaint>(result.Data.Items);

                    **if (!string.IsNullOrEmpty(searchText))
                        {
                            datas = datas.Where(i => i.Description.Contains(searchText)
                                                 && (i.SupervisorId.Equals(StaffId))
                                                || (i.ProblemTypeName.Contains(searchText)));
                        }
                    else
                        {
                            datas = datas.Where(i => i.SupervisorId.Equals(StaffId));
                        }**

                    Datas = new ObservableCollection<Complaint>(datas);
                }
            }
            else if (result.HasError)
            {
                await mPageDialogService.DisplayAlertAsync("Error", result.ErrInfo.Message, "OK");
            }           
     }      
}

datasif ... else的两项分配都会导致System.Collections.Generic.IEnumerable<ECS.Features.Complaints.Complaint>' to 'System.Collections.Generic.List<ECS.Features.Complaints.Complaint>'. An explicit conversions exists (are you missing a cast?)编译错误:

"Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<ECS.Features.Complaints.Complaint>' to 'System.Collections.Generic.List<ECS.Features.Complaints.Complaint>'.  An explicit conversions exists (are you missing a cast?)" compiler error

我不知道如何在那里使用WHERE条件。请帮我。提前感谢您的关注。

2 个答案:

答案 0 :(得分:5)

datasList<Complaint>,但您尝试使用IEnumerable<Complaint>语句将其重新分配给Where。在Where to maintain type,

之后添加ToList()

或者您可以将datas声明为IEnumerable<Complaint>

IEnumerable<Complaint> datas = new List<Complaint>(result.Data.Items);

答案 1 :(得分:2)

问题是datas被定义为List<Complaint>,而datas.Where(...)的返回类型是IEnumerable / IQueryable。

你可以这样做:

datas = datas.Where(i => i.SupervisorId.Equals(StaffId)).ToList();

完整代码:

private async Task CallApi(string searchText = null)     
    {           
        long lastUpdatedTime = 0;                           
        long.TryParse(AppSettings.ComplaintLastUpdatedTick, out lastUpdatedTime);

        var currentTick = DateTime.UtcNow.Ticks;            
        var time = new TimeSpan(currentTick - lastUpdatedTime);


        if (time.TotalSeconds > 1)          {
            int staffFk = Convert.ToInt32(StaffId);
            var result = await mDataProvider.GetComplaintList(lastUpdatedTime, mCts.Token, staffFk);
            if (result.IsSuccess)
            {

                // Save last updated time
                AppSettings.ComplaintLastUpdatedTick = result.Data.Updated.ToString();

                // Store data into database
                if ((result.Data.Items != null) &&
                    (result.Data.Items.Count > 0))
                {

                    var datas = new List<Complaint>(result.Data.Items);

                    if (!string.IsNullOrEmpty(searchText))
                        {
                            datas = datas.Where(i => i.Description.Contains(searchText)
                                                 && (i.SupervisorId.Equals(StaffId))
                                                || (i.ProblemTypeName.Contains(searchText))).ToList();
                        }
                    else
                        {
                            datas = datas.Where(i => i.SupervisorId.Equals(StaffId)).ToList();
                        }

                    Datas = new ObservableCollection<Complaint>(datas);
                }
            }
            else if (result.HasError)
            {
                await mPageDialogService.DisplayAlertAsync("Error", result.ErrInfo.Message, "OK");
            }           
     }      
}

然后,您的下一行也会出现错误,Datas = new ObservableCollection因为Datas未定义,如果您的意思是datas,那么它将不再是列表&lt;&gt; ;你最初定义的。