linq / lambda将匿名类型项目设置为强类型的最佳方法

时间:2015-08-05 04:16:17

标签: .net linq

我已经遍布谷歌,但无法找到解决问题的正确方法。 我有一个包含2个不同表的连接结果,总共有30多个字段。很明显,我可以手动输入每个字段,如下所示:

dbcontext.table1s.join(dbcontext.table2s,x=>table1ID,y=>table2ID, (x,y)=> new someTempClass {field1=x.field1,field2=x......})

我找到了这个链接,这就是我要找的东西。但是,如果匿名类型看起来像{x}或{y}而不是{x,y.field1},它似乎工作正常 http://www.palmmedia.de/blog/2012/2/18/aspnet-mvc-generic-filtering-based-on-expressions

我真的只需要table2中的一个字段。

2 个答案:

答案 0 :(得分:0)

我猜您使用的是Entity Framework,因此如果您想从实体中选择特定列并将它们投影为匿名或强类型,您可以使用投影查询。

// first we create a new class to contain less fields
public class PostRow
{
    public int Id { get; set; }
    public string Title { get; set; }
}

// returns posts with only the Id and Title
var posts = context.Posts.Select(p => new PostRow
{
    Id = p.Id,
    Title = p.Title
}).ToList();

https://www.talksharp.com/entity-framework-projection-queries

答案 1 :(得分:0)

您可以创建包含两种类型的匿名类型。 像这样:

var collection = dbcontext.table1s.join(
    dbcontext.table2s,
    x=>table1ID,
    y=>table2ID, 
    (x,y)=> new 
        {
            X = x,
            Y = y
        });

然后,您可以通过匿名类型访问这些字段。例如:

collection[0].X.field1
collection[0].Y.field2