从linq对象返回所选参数

时间:2013-11-04 05:50:48

标签: c# linq

我有一个实体:

public class Branch
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int BranchID { get; set; }
    public string Name { get; set; }
    public string Address1 { get; set; }
    public string Address2 { get; set; }
    public string Postcode { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string Country { get; set; }
}

我有一个apicontroller函数来返回分支对象:

IEnumerable<Branch> branches = null;
branches = repository.Branches.Where(b => b.LastModified > modifiedSince).AsEnumerable();

return branches;

如何仅返回BranchIDName

我试过这个:

IEnumerable<Branch> branches = null;

branches = repository.Branches
    .Where(b => b.LastModified > modifiedSince)
    .Select(b => new Branch  {BranchID = b.BranchID, Name = b.Name })
    .AsEnumerable();

return branches;

1 个答案:

答案 0 :(得分:3)

有很多方法可以做到这一点。所有这些都取决于您将如何处理返回的IEnumerable<Branch>

1)你可以使用匿名类型,但返回它会需要更多的黑客攻击。

var branches =  repository.Branches
                          .Where(b => b.LastModified > modifiedSince)
                          .Select(b => new { b.BranchID, b.Name })
                          .AsEnumerable();

2)或者你可以返回idname的元组。

var branches =  repository.Branches
                          .Where(b => b.LastModified > modifiedSince)
                          .Select(b => Tuple.Create(b.BranchID, b.Name))
                          .AsEnumerable();
return branches;

3)您可能想要创建自己的类,它只包含分支的ID和名称。

4)或者你可以为分支类提供一个替代构造函数,只有nameid作为参数传递。所有这些都取决于你的背景。

我倾向于选择元组方法。