2 回答

TA貢獻1155條經(jīng)驗 獲得超0個贊
您確實不需要在 Linq 中加入任何關(guān)系來建立關(guān)系。您只需要在模型中定義您的關(guān)系(生成器會自動為您執(zhí)行此操作,前提是您已在數(shù)據(jù)庫本身中設(shè)置了關(guān)系 - 或者您直接在模型中執(zhí)行此操作,例如首先使用代碼)。以下示例展示了為什么不需要它,以及如何使用導(dǎo)航屬性(基于 MS SQL Northwind 示例數(shù)據(jù)庫):
string defaultConString = @"server=.\SQLExpress2012;Database=Northwind;Trusted_Connection=yes;";
void Main()
{
var ctx = new MyContext(defaultConString);
var customerId = "FISSA";
var customer = ctx.Customers
.Include(c => c.Orders)
.SingleOrDefault(c => c.CustomerId == customerId);
if (customer != null)
{
Console.WriteLine($"{customer.CompanyName}, Orders: {customer.Orders.Count()}");
// var frmMusteriSiparisleri = new Form { Text = string.Format("[{0}] - Siparisler", customerId) };
// var dgvSiparisler = new DataGridView { Dock = DockStyle.Fill, ReadOnly = true, DataSource = customer.Orders.ToList() };
// frmMusteriSiparisleri.Controls.Add(dgvSiparisler);
// frmMusteriSiparisleri.ShowDialog();
}
}
public class MyContext : DbContext
{
public MyContext(string connectionString)
: base(connectionString)
{ }
public DbSet<Customer> Customers { get; set; }
public DbSet<Order> Orders { get; set; }
public DbSet<OrderDetail> OrderDetails { get; set; }
public DbSet<Product> Products { get; set; }
}
public class Customer
{
[Key]
public string CustomerId { get; set; }
public string CompanyName { get; set; }
public string ContactName { get; set; }
// ...
public virtual List<Order> Orders { get; set; }
}
public class Order
{
[Key]
public int OrderId { get; set; }
public string CustomerId { get; set; }
public DateTime OrderDate { get; set; }
public DateTime? ShippedDate { get; set; }
[ForeignKey("CustomerId")]
public Customer Customer { get; set; }
public virtual List<OrderDetail> OrderDetails { get; set; }
}
[Table("Order Details")]
public class OrderDetail
{
[Key]
[Column(Order = 1)]
public int OrderId { get; set; }
[Key]
[Column(Order = 2)]
public int ProductId { get; set; }
public decimal UnitPrice { get; set; }
public Int16 Quantity { get; set; }
[ForeignKey("ProductId")]
public Product Product { get; set; }
[ForeignKey("OrderId")]
public Order Order { get; set; }
}
public class Product
{
public int ProductId { get; set; }
public string ProductName { get; set; }
// ...
}

TA貢獻1786條經(jīng)驗 獲得超13個贊
您需要左連接和DefaultIfEmpty
方法,如下所示:
var query = from l in context.Loan
? ? ? ? ? ? join lp in context.LoanPayment on l.Id equals lp.LoanId into j1
? ? ? ? ? ? from lp in j1.DefaultIfEmpty()
? ? ? ? ? ? select new { Loan = l, LoanPayment = lp == null ? "(No LoanPayment)"?
? ? ? ? ? ?: lp.Id.ToString() };
或者,如果您想選擇 的整個對象LoanPayment:
select new { Loan = l, LoanPayment = lp ?? new loanPayment() };
- 2 回答
- 0 關(guān)注
- 138 瀏覽
添加回答
舉報