564 Stimmen

Join/Where mit LINQ und Lambda

Ich habe Probleme mit einer Abfrage in LINQ und Lambda geschrieben. Bisher bekomme ich eine Menge von Fehlern hier ist mein Code:

int id = 1;
var query = database.Posts.Join(database.Post_Metas,
                                post => database.Posts.Where(x => x.ID == id),
                                meta => database.Post_Metas.Where(x => x.Post_ID == id),
                                (post, meta) => new { Post = post, Meta = meta });

Ich bin neu bei der Verwendung von LINQ, daher bin ich nicht sicher, ob diese Abfrage korrekt ist.

14 Stimmen

Was wollen Sie erreichen?

4 Stimmen

Was soll die Abfrage in einem Satz bewirken?

6 Stimmen

Ihre wichtigsten Selektoren sind Weg zu kompliziert. Wenn Sie nach der ID auswählen möchten, reicht x=>x.ID aus.

8voto

Mahib Punkte 3767

Ich habe etwas Ähnliches gemacht;

var certificationClass = _db.INDIVIDUALLICENSEs
    .Join(_db.INDLICENSECLAsses,
        IL => IL.LICENSE_CLASS,
        ILC => ILC.NAME,
        (IL, ILC) => new { INDIVIDUALLICENSE = IL, INDLICENSECLAsse = ILC })
    .Where(o => 
        o.INDIVIDUALLICENSE.GLOBALENTITYID == "ABC" &&
        o.INDIVIDUALLICENSE.LICENSE_TYPE == "ABC")
    .Select(t => new
        {
            value = t.PSP_INDLICENSECLAsse.ID,
            name = t.PSP_INDIVIDUALLICENSE.LICENSE_CLASS,                
        })
    .OrderBy(x => x.name);

8voto

Abfragesyntax für LINQ Join

var productOrderQuery = from product in Product.Setup()//outer sequence
                        join order in OrderDetails.Setup()//inner sequence
                        on product.Id equals order.ProductId //key selector
                        select new//result selector
                        {
                            OrderId = order.Id,
                            ProductId = product.Id,
                            PurchaseDate = order.PurchaseDate,
                            ProductName = product.Name,
                            ProductPrice = product.Price
                        };

Methodensyntax für LINQ Join

var productOrderMethod = Product.Setup().//outer sequence
    Join(OrderDetails.Setup(), //inner sequence
    product => product.Id//key selector
    ,order=> order.ProductId //key selector
    ,(product,order)=> //projection result
        new
        {
            OrderId = order.Id,
            ProductId = product.Id,
            PurchaseDate = order.PurchaseDate,
            ProductName = product.Name,
            ProductPrice = product.Price
        }
    );

Product.cs als Referenz

class Product
{
    public int Id { get; set; }
    public string Name { get; set; }

    public decimal Price { get; set; }
    public static IEnumerable<Product> Setup()
    {
        return new List<Product>()
        {
            new Product(){Id=1, Name="Bike", Price=30.33M },
            new Product(){Id=2, Name="Car", Price=50.33M },
            new Product(){Id=3, Name="Bus", Price=60.33M }
        };
    }
}

OrderDetails.cs Klasse als Referenz

class OrderDetails
{
    public int Id { get; set; }
    public virtual int ProductId { get; set; }

    public DateTime PurchaseDate { get; set; }
    public static IEnumerable<OrderDetails> Setup()
    {
        return new List<OrderDetails>()
        {
            new OrderDetails(){Id=1, ProductId=1, PurchaseDate= DateTime.Now },
            new OrderDetails(){Id=2, ProductId=1, PurchaseDate=DateTime.Now.AddDays(-1) },
            new OrderDetails(){Id=3, ProductId=2, PurchaseDate=DateTime.Now.AddDays(-2) }
        };
    }

}

0 Stimmen

Können Sie eine Antwort mit wo Bedingung in Methode Syntax für LINQ Join bereitstellen

7voto

pepitomb Punkte 141

Es könnte etwas sein wie

var myvar = from a in context.MyEntity
            join b in context.MyEntity2 on a.key equals b.key
            select new { prop1 = a.prop1, prop2= b.prop1};

6voto

Ahamed Ishak Punkte 812

Diese Linq-Abfrage sollte für Sie funktionieren. Es wird alle Beiträge, die post meta haben.

var query = database.Posts.Join(database.Post_Metas,
                                post => post.postId, // Primary Key
                                meta => meat.postId, // Foreign Key
                                (post, meta) => new { Post = post, Meta = meta });

Äquivalente SQL-Abfrage

Select * FROM Posts P
INNER JOIN Post_Metas pm ON pm.postId=p.postId

1 Stimmen

Sie haben die Klammern geschlossen, wo nach dem dritten Parameter... "keine Überladung für Join nimmt drei Argumente"

5 Stimmen

Dies ist identisch mit der akzeptierten Antwort und 7 Jahre später -1

1voto

mtngunay Punkte 69

1 ist gleich 1 zwei verschiedene Tabellen verbinden

var query = from post in database.Posts
            join meta in database.Post_Metas on 1 equals 1
            where post.ID == id
            select new { Post = post, Meta = meta };

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X