C# 在linq中过滤数据

C# 在linq中过滤数据,c#,sql,entity-framework,linq,C#,Sql,Entity Framework,Linq,目前我使用EF从数据库中检索数据 我想把4个db连接合并成1个 因此,我使用以下sql: select 0 as text union select distinct channel as text from CHARGE_ORDER union select 1 as text union select distinct packet_id as text from CHARGE_ORDER union select 2 as text un

目前我使用EF从数据库中检索数据

我想把4个db连接合并成1个

因此,我使用以下sql:

select 0 as text
union
select distinct channel        as text    from  CHARGE_ORDER
union
select 1 as text
union      
select distinct  packet_id     as text    from  CHARGE_ORDER
union
select 2 as text
union   
select distinct  recharge_type  as text    from  CHARGE_ORDER
union
select 3 as text
union  
select distinct   order_type    as text    from  CHARGE_ORDER
union
select 4 as text
然后

var total=context.Database.SqlQuery(totalSql.ToList();
我想这样使用Linq:(这是错误的)

dto.channelSelect=total.Where(x=>“0”>x.text.Substring(0,1)和&x.text.Substring(0,1)<“1”)。
但是文本是字符串,Linq不起作用

我可以使用方法来获取我想要的数据

private List<SelectDto> PostHandle(List<SelectDto> list,string start,string end)
            {
                List<SelectDto> result = new List<SelectDto>();
                int len = list.Count;
                for(int i = 0; i < len; i++)
                {
                    if (list[i].text == start)
                    {
                        for(int j = i+1; j < len; j++)
                        {
                            if (list[j].text != end)
                            {
                                result.Add(list[j]);
                            }
                            else
                            {
                                break;
                            }
                        }
                    }

                }
             return result ;
            }
私有列表PostHandle(列表、字符串开始、字符串结束)
{
列表结果=新列表();
int len=list.Count;
对于(int i=0;i
是否有更好的方法处理此要求

也许我的问题不清楚

所以有人建议我去滑雪;但是,认为skipWhile无法满足这一需求

这就是我需要的;我不知道是否有更好的办法

 var total = context.Database.SqlQuery<SelectDto>(totalSql).ToList();
            dto.channelSelect = PostHandleFilter(total, "0", "1");
            dto.packetSelect = PostHandleFilter(total, "1", "2");
            dto.chargeSelect = PostHandleFilter(total, "2", "3");
            dto.orderSelect = PostHandleFilter(total, "3", "4");
var total=context.Database.SqlQuery(totalSql.ToList();
dto.channelSelect=PostHandleFilter(总计“0”、“1”);
dto.packetSelect=PostHandleFilter(总计“1”、“2”);
dto.chargeSelect=后处理过滤器(总计“2”、“3”);
dto.orderSelect=PostHandleFilter(总计“3”、“4”);

在linq查询中使用
SkipWhile
dto.channelSelect=total.SkipWhile(x=>x.text.Substring(0,1)>“0”和&x.text.Substring(0,1)<“1”)
它不工作,因为文本是字符串;字符串不能与字符串进行比较您应该使用
string.compare
方法来比较字符串
dto.channelSelect=total.SkipWhile(x=>string.Compare(x.text.Substring(0,1),“0”)>=0&&string.Compare(x.text.Substring(0,1),“1”ok~谢谢兄弟,我现在已经发布了答案。
private List<SelectDto> PostHandle(List<SelectDto> list,string start,string end)
            {
                List<SelectDto> result = new List<SelectDto>();
                int len = list.Count;
                for(int i = 0; i < len; i++)
                {
                    if (list[i].text == start)
                    {
                        for(int j = i+1; j < len; j++)
                        {
                            if (list[j].text != end)
                            {
                                result.Add(list[j]);
                            }
                            else
                            {
                                break;
                            }
                        }
                    }

                }
             return result ;
            }
 var total = context.Database.SqlQuery<SelectDto>(totalSql).ToList();
            dto.channelSelect = PostHandleFilter(total, "0", "1");
            dto.packetSelect = PostHandleFilter(total, "1", "2");
            dto.chargeSelect = PostHandleFilter(total, "2", "3");
            dto.orderSelect = PostHandleFilter(total, "3", "4");