我想这是一个非常标准的任务,但我仍然不能习惯LINQ。我需要从我的数据库中的表中只有两行,现在我使用两个单独的LINQ查询:
imageInfo = AppConfigService.All().Where(a =>(a.ConfigProperty == "MaterialImages")).FirstOrDefault();
imageLocation = AppConfigService.All().Where(c => (c.ConfigProperty == "DefaultImagePath")).FirstOrDefault();
我想要的是将信息保存在一个变量中,例如我imageInfo[0]
的{{1}}和MaterialImages
的{{1}}或类似的东西。尽管我对LINQ知之甚少,但我认为不需要这两个查询。
答案 0 :(得分:4)
您可以使用Concat
和Take(1)
:
var imageInfoLocation =
(from a in AppConfigService
where a.ConfigProperty == "MaterialImages"
select cust).Take(1)
.Concat(
(from a in AppConfigService
where a.ConfigProperty == "DefaultImagePath"
select cust).Take(1))
;
答案 1 :(得分:3)
您可以使用下面的单个查询,但原始查询更具可读性:
var res = AppConfigService
.All()
.Where(a =>(a.ConfigProperty == "MaterialImages" || a.ConfigProperty == "DefaultImagePath"))
.GroupBy(a => a.ConfigProperty)
.ToDictionary(g => g.Key, g => g.FirstOrDefault());
这将带回不超过两个项目的字典:一个用于ConfigProperty
,一个用于具有该属性的第一个或默认项目。如果没有包含"MaterialImages"
或"DefaultImagePath"
的源行,则结果将包含少于两个项目。您可以通过使用相应的常量作为键来查找字典中的值。
答案 2 :(得分:1)
我认为不可能在一个查询中做,因为你想要第一个元素形成满足两个不同条件的列表,如果你想在一个集合中获得结果,你可以使用union
var union = imageInfo = AppConfigService.All().
Where(a =>(a.ConfigProperty == "MaterialImages")).FirstOrDefault().
Union(
AppConfigService.All().Where(c => (c.ConfigProperty ==
"DefaultImagePath")).FirstOrDefault());
答案 3 :(得分:-1)
您可以使用以下内容
var rows = AppConfigService.All().Where(a =>(a.ConfigProperty == "MaterialImages" || c.ConfigProperty == "DefaultImagePath"));