Idan Shechter Idan Shechter - 1 year ago 151
C# Question

Return Anonymous Type using SqlQuery RAW Query in Entity Framework

How can I make Entity Framework SqlQuery to return an Anonymous type.

Right now I run a

RAW query. the query joins two tables and I want to return the results of the joined tables.

If I use it with a type
I only get to see the results of the table of that same type.

I tried
db.Database.SqlQuery<DbResults>("the sql query here")
; With a pre-defined class that matches the result's objects, but all the fields are null.

Using Entity Framework 6 with MySQL.

Answer Source

I'm going out on a limb here, and will try to address your underlying problem instead of directly answering your question.

Your scenario with the pre-defined class should work. A likely pitfall is that the column names and the properties of your class did not match up.

Sample code (LinqPad)

    var results = Database.SqlQuery<TestResult>("select r.Name, b.BankName from relation r inner join BankAccount b on b.RelationId = r.Id where r.Id = 2");

public class TestResult {
    public string Name { get; set; }
    public string BankName { get; set; }

I'd strongly advise you to revisit your problematic code using explicit types.

In direct response to your question: no, you can't return anonymous types from SqlQuery. The best you can do is build dynamic objects, but that unfortunately requires a fair bit of manual work using TypeBuilder. See for a sample.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download