linq的right join应该怎么写?

abz7676 2015-12-17 10:04:19
tableA

Id Type OrderNumber
3 类型1 1
7 类型2 2


tableB

Id TypeName Order
3 类型1 3
7 类型2 1
8 类型4 8
10 类型6 2

tableA的字段Id关联tableB的字段Id,并且tableA right join tableB ,并且按照tableA的字段OrderNumber排序,tableB里有的数据但是tableA里没有的数据的OrderNumber的数值按照tableA的OrderNumber最大值加1,依次排在最后面

最终我想显示出这样的数据

Id TypeName OrderNumber
3 类型1 1
7 类型2 2
8 类型4 3
10 类型6 4

请问这个语句应该怎么写?



...全文
247 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
abz7676 2015-12-18
  • 打赏
  • 举报
回复
引用 4 楼 q107770540 的回复:
try this: var query = from b in this.TableBs join a in this.TableAs on b.Id equals a.Id into lg from a in lg.DefaultIfEmpty() select new tableB { Id = b.Id, TypeName = b.TypeName, OrderNumber = a==null?0:a.OrderNumber }; int lastOrder=0; foreach(var item in query.ToList()) { if(item.OrderNumber==0) item.OrderNumber=lastOrder+1; else lastOrder=item.OrderNumber; }
程序报错:(无法对属性或索引器“AnonymousType#4.OrderNumber”赋值 它是只读的)
q107770540 2015-12-17
  • 打赏
  • 举报
回复
foreach(var item in query.ToList()) { if(item.OrderNumber==0) item.OrderNumber=lastOrder+1; lastOrder=item.OrderNumber; } 删除else
abz7676 2015-12-17
  • 打赏
  • 举报
回复
引用 4 楼 q107770540 的回复:
try this: var query = from b in this.TableBs join a in this.TableAs on b.Id equals a.Id into lg from a in lg.DefaultIfEmpty() select new tableB { Id = b.Id, TypeName = b.TypeName, OrderNumber = a==null?0:a.OrderNumber }; int lastOrder=0; foreach(var item in query.ToList()) { if(item.OrderNumber==0) item.OrderNumber=lastOrder+1; else lastOrder=item.OrderNumber; }
好的,谢谢,明天我试一下。
q107770540 2015-12-17
  • 打赏
  • 举报
回复
try this:

var query = from b in this.TableBs
join a in this.TableAs on b.Id equals a.Id
into lg
from a in lg.DefaultIfEmpty()
select new tableB
{
Id = b.Id,
TypeName = b.TypeName,
OrderNumber = a==null?0:a.OrderNumber
};
int lastOrder=0;
foreach(var item in query.ToList())
{
if(item.OrderNumber==0) item.OrderNumber=lastOrder+1;
else lastOrder=item.OrderNumber;
}
abz7676 2015-12-17
  • 打赏
  • 举报
回复
引用 2 楼 q107770540 的回复:
void Main()
{
 
 var query = from b in this.TableBs
			join a in this.TableAs on b.Id equals a.Id
			into lg
			from a in lg.DefaultIfEmpty()
			select new 
			{
				Id = b.Id,
				TypeName = b.TypeName,
				OrderNumber = a==null?0:a.OrderNumber
			};
	int lastOrder=0;		
	foreach(var item in query)
	  {
	     if(item.OrderNumber==0) item.OrderNumber=lastOrder+1;
		 else lastOrder=item.OrderNumber;
	  }
	 
}
因为这个linq语句是放在


public IQueryable<tableB> GetFunction(string id)
        {
          var model=""
          return model;
         }

程序报错一:(无法对属性或索引器“AnonymousType#4.OrderNumber”赋值 它是只读的) 程序报错二:(无法将类型“System.Linq.IQueryable<AnonymousType#4>”隐式转换为“System.Linq.IQueryable<QIMS.Models.tableB>”。存在一个显式转换(是否缺少强制转换?) )
q107770540 2015-12-17
  • 打赏
  • 举报
回复
 
 var query = (from b in this.TableBs
			join a in this.TableAs on b.Id equals a.Id
			into lg
			from a in lg.DefaultIfEmpty()
			select new 
			{
				Id = b.Id,
				TypeName = b.TypeName,
				OrderNumber = a==null?0:a.OrderNumber
			}).Aggregate((x,y)=>{
			   if(y.OrderNumber==0) {y.OrderNumber=x.OrderNumber+1;}
			   return y;
			});
q107770540 2015-12-17
  • 打赏
  • 举报
回复
void Main()
{
 
 var query = from b in this.TableBs
			join a in this.TableAs on b.Id equals a.Id
			into lg
			from a in lg.DefaultIfEmpty()
			select new 
			{
				Id = b.Id,
				TypeName = b.TypeName,
				OrderNumber = a==null?0:a.OrderNumber
			};
	int lastOrder=0;		
	foreach(var item in query)
	  {
	     if(item.OrderNumber==0) item.OrderNumber=lastOrder+1;
		 else lastOrder=item.OrderNumber;
	  }
	 
}

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧