LINQ / Projection - 如何按表格的非FK列ID /名称字段对TableS进行排序?

时间:2011-11-08 01:41:39

标签: linq asp.net-mvc-3 linq-to-sql

如何使用LINQ / Projection对包含引用表/对象B(B包含id和名称)的id字段的A对象列表进行排序。

我想按B.name?

对包含B的A对象列表进行排序

模型(伪)

public class A
{
   public int AId {get; set;}
   public Nullable<int> BId {get; set;}
}
public class B
{
   public int BId {get;set;}
   public string Name {get;set;}
}

某些控制器中的代码传入一个包含B的A列表但是按B.Name排序?

var list = db.As.OrderBy(x => x.BId->References.Name);  // Way wrong but using something similar
return(list.ToList()

基本上,寻找相当于此的东西(使用上面的投影连接或OrderBy):

        var q1 =
             from a in db.As
             join b in db.Bs on a.BId equals b.BId
             orderby b.Name   // <- Need this to sort by B's name
             select c;

1 个答案:

答案 0 :(得分:1)

我是否正确您正在寻找上面已经写过的LINQ查询的等价物,只是它基于扩展方法而不是?

在这种情况下,以下内容应该有效:

var list = db.As.Where(a => a.BId.HasValue)
                .Join(db.Bs, a => a.BId.Value, b => b.BId, (a, b) => new { a, b.Name })
                .OrderBy(r => r.Name)
                .Select(r => r.a);

我还添加了一个检查,以确保A.BId在获取其值之前不为空。

只是好奇:为什么你不能使用你的LINQ查询(唯一的区别是选择a而不是c)?