【问题标题】:How to Get results from multiple tables using LINQ如何使用 LINQ 从多个表中获取结果
【发布时间】:2011-12-08 20:22:06
【问题描述】:

我正在研究自动完成文本框。在这个用户可以输入他们的城市名称,并从这个输入中我想从数据库表中搜索记录并显示城市名称、州名和国家名称的相关组合列表。

如何使用 LINQ 获取此详细信息。

我的表结构如下,

国家 国之PK 国名

国语PK 州名 国别FK

城市 同城PK 城市名 国家FK

我想获得自动完成文本框的结果。

例如,如果用户写 san 他将获得包含 san 的城市名称列表

如美国加利福尼亚州旧金山。

如何编写 LINQ 查询来获得此结果。

【问题讨论】:

  • 这是 LINQ to SQL 还是 LINQ to Entities(实体框架)?不能两者兼有。

标签: c# .net linq linq-to-sql linq-to-entities


【解决方案1】:

使用 linq-to-sql:

var q = from c in context.cities
select c.CityName + ", " + c.State.StateName + ", " + c.State.Country.CountryName
where CityName.StartsWith(typed);

这将给出一个 IEnumerable,其中包含与键入的字符匹配的建议。

【讨论】:

  • 您可能想尝试分析将 where 子句放在末尾和将其放在 select 子句之前之间的区别。使用 LINQ to Objects,您的语法可能不是最佳的,但 LINQ 提供程序和/或数据库引擎可能会优化额外的子选择。
  • @Jim Wooley:如果这是 linq-to-sql,那么数据库引擎会处理这个问题。如果是 linq-to-objects,那么 where 与 select 的顺序是有意义的。
【解决方案2】:
var query = from c in dataContext.City
            where c.Contains(keyword)
            select c.CityName + ", " + c.State.StateName+ ", "+ c.State.Country.CountryName;

【讨论】:

  • @JohnSaunders 现在怎么样,约翰?
【解决方案3】:

另一种变体:

var matches = cities.Where(c => c.CityName.Contains(substr))
                    .Select(a => String.Format("{0} {1} {2}",
                                        a.CityName, 
                                        a.State.StateName, 
                                        a.State.Country.CountryName 
                           ));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-29
    • 2012-03-06
    • 2017-11-12
    • 2013-06-26
    • 1970-01-01
    • 2021-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多