C# 在linq中过滤数据
目前我使用EF从数据库中检索数据 我想把4个db连接合并成1个 因此,我使用以下sql: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
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");