【发布时间】:2018-05-14 15:40:23
【问题描述】:
我有带有字段 ModelName,Maker,Year,Price 的表格“Cars”和带有字段 的表格“Maker”名称。 我需要 Linq to Sql 查询,我可以在其中选择模型计数 > n 的所有制造商。
我试过了:
Data.ItemsSource = (from m in db.GetTable<Maker>()
where (from c in db.GetTable<Car>()
where c.Maker == m.Name
select c).Count() > 1
select m.Name);
但是没有结果。我该如何实现?
UPD。 表车代码
CREATE TABLE [dbo].[Car] (
[CarId] INT IDENTITY (1, 1) NOT NULL,
[ModelName] NVARCHAR (50) NOT NULL,
[Equipment] NVARCHAR (50) NULL,
[Year] INT NULL,
[Price] INT NULL,
[Cathegory] NCHAR (20) DEFAULT ('Sedan') NOT NULL,
[Maker] NCHAR (20) DEFAULT ('Toyota') NOT NULL,
PRIMARY KEY CLUSTERED ([CarId] ASC),
CONSTRAINT [FK_Car_ToCatheg] FOREIGN KEY ([Cathegory]) REFERENCES [dbo].[Catheg] ([Name]) ON DELETE CASCADE,
CONSTRAINT [FK_Car_ToMaker] FOREIGN KEY ([Maker]) REFERENCES [dbo].[Maker] ([Name]) ON DELETE CASCADE
);
类车
[Table(Name = "Car")]
public class Car
{
[Column(IsPrimaryKey = true, IsDbGenerated = true)]
public int CarId { get; set; }
[Column]
public string ModelName { get; set; }
[Column]
public string Equipment { get; set; }
[Column]
public int Year { get; set; }
[Column]
public int Price { get; set; }
[Column]
public string Maker { get; set; }
[Column]
public string Cathegory { get; set; }
public Car()
{ }
public Car(string modelName, string equipment, int year, int price, string cath, string carmaker, int id = -1)
{
ModelName = modelName;
Equipment = equipment;
Year = year;
Price = price;
Maker = carmaker;
Cathegory = cath;
CarId = id;
}
public override string ToString()
{
return ModelName + " " + Equipment + " " + Year + " " + Maker + " " + Price + " " + Cathegory;
}
制表器代码
CREATE TABLE [dbo].[Maker] (
[Name] NCHAR (20) NOT NULL,
PRIMARY KEY CLUSTERED ([Name] ASC)
);
类生成器
[Table(Name = "Maker")]
public class Maker
{
[Column(IsPrimaryKey = true)]
public string Name { get; set; }
}
【问题讨论】:
-
似乎你想要
c.MakerId == m.Id或类似的东西,除非Maker只是制造商的名字。此外,假设您在表之间具有外键关系,并且设置实体以正确利用它们,您应该能够使用导航属性。您可以分享相关实体的代码吗?另外你真的在使用 Linq-To-Sql 而不是 EF 吗?
标签: c# linq-to-sql