[英]LINQ code to combine two database tables?
所以我有一個表,我在一個網站上顯示,通過一些LINQ代碼從數據庫獲取所有信息。 表“db.Log”包含一些內容和一個外鍵customerId ,它鏈接到名為dbo.customers的數據庫中的Id (它只有Id和customerName) ,我希望LINQ代碼將這兩者結合起來,所以我除非你全部知道,否則可以在表格中填寫客戶的姓名,而不是真正說不出任何內容的ID。 以下是當前代碼:
LogModelsController.cs
message = (from log
in db.Log
select log);
int pageSize = 10;
int pageNumber = (page ?? 1);
return View(message.OrderByDescending(i => i.timeStamp).ToPagedList(pageNumber, pageSize));
LogModel.cs
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity;
namespace ASDMVC.Models
{
[Table("Log")]
public class LogModel
{
[Key]
public long id { get; set; }
public string message { get; set; }
public DateTime timeStamp { get; set; }
public string level { get; set; }
public int customerId { get; set; }
}
public class LogDBContext:DbContext
{
public LogDBContext() : base("MySqlConnection")
{
}
public DbSet <LogModel> Log { get; set; }
}
}
我對LINQ代碼很新,請原諒我,任何幫助都將不勝感激。
提前致謝。
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity;
using System.Web.Mvc;
namespace ASDMVC.Models
{
[Table("Customers")]
public class NewCustomerModel
{
[Key]
public int Id { get; set; }
[Display(Name = "Customer Id")]
public int CustomerId { get; set; }
public string CustomerName { get; set; }
}
public class CustomerDBContext : DbContext
{
public CustomerDBContext() : base("MySqlConnection")
{
}
public DbSet<NewCustomerModel> Customers { get; set; }
}
}
我認為(在與朋友交談后)需要這種模式 - 可能完全錯誤。
LogModelsController.cs
message = (from log in db.Log join customers in dbo.Customers on log.customerId equals customers.Id select log);
int pageSize = 10;
int pageNumber = (page ?? 1);
return View(message.OrderByDescending(i => i.timeStamp).ToPagedList(pageNumber, pageSize));
LogModel.cs
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity;
namespace ASDMVC.Models
{
[Table("Log")]
public class LogModel
{
[Key]
public long id { get; set; }
public string message { get; set; }
public DateTime timeStamp { get; set; }
public string level { get; set; }
public int customerId { get; set; }
public int customerName { get; set; }
}
public class LogDBContext:DbContext
{
public LogDBContext() : base("MySqlConnection")
{
}
public DbSet <LogModel> Log { get; set; }
}
}
有錯誤:
指定的LINQ表達式包含對與不同上下文關聯的查詢的引用。
這應該為你做:
var message = (from log in db.Log
join customers in dbo.customers on log.customerid equals customers.Id
select log);
在上面,沒有必要明確使用where
子句,因為在連接中處理。
如果您只想返回特定列,可以執行以下操作:
var message = (from log in db.Log
join customers in dbo.customers on log.customerid equals customers.Id
select new { customerId = customers.Id, logId = log.id });
如果你想在兩個上下文之間進行連接,請看一下這個解決方法: 模擬交叉上下文連接 - LINQ / C#
控制器:
message = db.GetLogs();
int pageSize = 10;
int pageNumber = (page ?? 1);
var logs = message.OrderByDescending(i => i.timeStamp).ToPagedList(pageNumber, pageSize);
foreach (var log in logs)
log.Name = Customer.Where(a => a.Value == log.customerId.ToString()).FirstOrDefault().Text;
return PartialView("_LogPartialLayout", logs);
模型:
using System;
using System.Linq;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity;
using System.Collections.Generic;
using System.Web.Mvc;
namespace ASDMVC.Models
{
[Table("Log")]
public class LogModel
{
[Key]
public long id { get; set; }
public string message { get; set; }
public DateTime timeStamp { get; set; }
public string level { get; set; }
public int customerId { get; set; }
[NotMapped]
public string Name { get; set; }
}
public class LogDBContext:DbContext
{
public LogDBContext() : base("MySqlConnection")
{
}
public DbSet <LogModel> Log { get; set; }
public IQueryable<LogModel> GetLogs()
{
return from log in Log
select log;
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.